eMatematikas Prisijunk Forumas Egzaminų užduotys ONLINE testai

Vidutinio sunkumo programavimo uždavinys


Natūralusis skaičius x laikomas laimingu, kai jį sudaro lyginis skaitmenų skaičius 2k ir kurio pirmųjų k skaitmenų suma yra lygi paskutiniųjų k skaitmenų sumai. Parenkite programą, surandančią visus intervalo [m; n] laimingus skaičius.

Reikalavimai
Būtinos funkcijos, grąžinančios apskaičiuotą reikšmę per funkcijos vardą:

1) skaitmenų kiekio skaičiavimo funkcija;

2) skaitmenų sumos skaičiavimo funkcija.

Programoje gali būti ir daugiau funkcijų, grąžinančių apskaičiuotą reikšmę per funkcijos vardą.

Pradiniai duomenys: 1000 1100
Rezultatas: 1001 ir 1010        

Pradiniai duomenys: 100 1000
Rezultatas: Nebus nė vieno laimingo skaičiaus

Nei vienoje temoje nėra pateiktas tavo kodas. Keista ar ne?...

Atsiprašau, kad trukdau Jus. Bet tikrai nekelčiau jei mokėčiau.

O taip tai aš savarankiškai mokausi, niekas nepadeda (išskyrus Jus) ir dėl to labai sunku.

Turėjau omeny, kad jei mokaisi programavimo kodą vistiek rašai ir jį galėtum įkelti kad aiškintis kas blogai. Jei pati/pats neprogramuosi kad čia gausi gatava kodą jokios naudos iš to nebus.

Aišku, ačiū už patarimą :)

// Example program
#include <iostream>

int skaitmenuKiekis(int skaicius) {
    int suma = 0;
    while (skaicius > 0) {
        suma++;
        skaicius /= 10;
    } 
    return suma;
}
bool skaitmenuSuma(int skaicius, int kiekis) {
    int suma1 = 0, suma2 = 0, i, temp;
    for (i = 0; i < kiekis; i++) {
            if (i < kiekis/2) {
                temp = skaicius % 10;
                suma1 += temp;
                skaicius /= 10;
            } else {
                temp = skaicius % 10;
                suma2 += temp;
                skaicius /= 10;
            }
    }
    if (suma1 == suma2) {
        return true;
    } else {
        return false;
    }
}
int main()
{
  int m = 1000, n = 2000, i;
  int kiekis;
  bool lygi_suma = false;
  if (m > 0 && n > 0) {
    for (i = m; i < n; i++) {
        kiekis = skaitmenuKiekis(i);
        if (kiekis % 2 == 0) {
            lygi_suma = skaitmenuSuma(i, kiekis); 
        }
        if (lygi_suma) {
            std::cout << i << std::endl; 
        }
    }
  }
}

pakeista prieš 7 m

Ačiū už atsakymą. Deja pajėgiau pati parašyti tik skaitmenų skaičiavimo funkciją.

Čia ,almostlow, kad įrodyčiau, kad stengiuosi ir mokausi :)
[code]

//Laimingi skaičiai
#include <iostream>
#include <iomanip>
#include <cmath>


using namespace std;

int KiekSkaitmenu(long x)
{
    int skaitmenys = 0;
    while(x>0)
    {
        x = x/10;
        skaitmenys++;

    }
    return skaitmenys;
}


long Suma(long x)
{
    long reiksme = 0;
    reiksme = x%10 + (x%100)/10;
    return reiksme;
}

int main ()
{
  int m, n;
  int laikinas = 0;
  int k;
  long x;
  cin >> m >> n;
  //Programos veiksmai

for(int i=m;i<n;i++)
{
    x=i;
    if(KiekSkaitmenu(x)%2 == 0 && ((i/1000)+(i/100%10))==Suma(x))
    {
        cout << x << endl;
        laikinas++;
    }

}
if(laikinas == 0)
    cout << "Skaitmenu nera

Nori sudalyvauti šioje temoje ir parašyti savo pranešimą? Prisijungti »