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

Cerința
Se dă un șir de n numere naturale nenule. Determinați pentru fiecare număr din șir care este cel mai mare divizor impar al său.

Date de intrare
Programul citește de la tastatură numărul n, iar apoi n numere naturale, separate prin spații.

Date de ieșire
Programul va afișa pe ecran n numere naturale separate prin spații reprezentând cei mai mari divizori impari ai numerelor din șir.

Restricții și precizări
1 ≤ n ≤ 10.000
cele n numere citite vor avea cel mult 16 cifre și vor fi strict pozitive.

Exemplu
Intrare

5
88 25 14 1 6
Ieșire

11 25 7 1 3

Răspunsuri la întrebare

Răspuns de 1Viserys
2

#include <iostream>

using namespace std;

int main()

{

int n, x, i, j, div;

cin>>n;

for(i=0; i<n; i++)

{

cin>>x;

for(j=1; j<=x; j++)

{

if(x%j==0 && j%2==1)

div=j;

}

cout<<div<<" ";

}

return 0;

}

//Programul functioneaza, este testat in prealabil in CodeBlocks



1Viserys: eventual poti initializa pe x cu long long x; in loc de int x; pt ca poate avea pana in 16 cifre
boiustef: dar pe pbinfo da depasiri de timp ...
1Viserys: pai nu ai mentionat nimic despre limita de timp :)
boiustef: era binevenit testarea pe pbinfo, doar se stiia ca e de acolo.. :))
Răspuns de boiustef
4

#include <iostream>

using namespace std;

long long divMaxImpar(long long num)

{

   while (num%2==0)

       num/=2;

   return num;

}

int  main()

{

   long long n, i, num;

   cin >> n;

   for (i=1; i<=n; ++i)

   {

       cin >> num;

       cout << divMaxImpar(num) << " ";

   }

   return 0;

}

Acest cod da 100 pe pbinfo

Alte întrebări interesante