Informatică, întrebare adresată de eduardmihailescu26, 8 ani în urmă

Salut. Ma poate ajuta cineva la aceasta problema? Este din variantele de antrenament 2007, profil real varianta 25. Ma pregatesc pentru bac. Cu explicatii va rog mult si cod C++!

Anexe:

Răspunsuri la întrebare

Răspuns de fatman195322
1

#include <iostream>

using namespace std;

int main()

{

int i, x,;

bool ok = 0;

cin>>x;

while (ok == 0)

{

if (x%2 == 0)

   x /= 2;

else

   if (x == 2*(x/2-1)+3)

       x = x/2-1;

if (x == 1 || x == 2 || x == 4 || x == 5 || x == 7 || x == 8)

   ok = 1;

else

   if (x == 3 || x == 6 || x == 9)

          {

           cout<<"NU";

           break;

          }

}

if (ok == 1 )

cout<<"DA";

return 0;

}

Făcusem așa inițial, însă chiar acum mi-am dat seamă că, în principiu, ar fi în șir toate numerele ce nu sunt multiplii de 3...

Anexe:

eduardmihailescu26: Multumesc mult!
eduardmihailescu26: Imi poti explica te rog si in ce consta eficienta? Gen la pct b)
fatman195322: Ok, păi... era în afara discuției să generăm șirul, fiind un număr imens de numere, așa că mă gândisem să-l descompun pe x folosind formulele date de cerință. Am testat și programul unde doar vedeam dacă e multiplu de 3 sau nu și mi-a dat aceleași rezultate, deci... cel mai eficient așa ar fi (pare corect), dar mi se pare anormal de simplă rezolvarea. :))
Alte întrebări interesante