Salut, stie cineva cum se face?
Din fișierul atestat.in se citesc de pe prima linie un număr întreg n≤100 și apoi de pe a doua linie n
numere întregi cu cel mult nouă cifre. Să se afișeze în ordine crescătoare toate numerele rotunde din
fișier. Se numește număr rotund un număr care are aceleași cifre de 0 și de 1 în scrierea în baza 2.
Exemplu: numerele 10 și 1001 scrise în baza 2 sunt numere rotunde 10 în baza 2 reprezintă 2 în
baza 10 , iar 1001 în baza 2 reprezintă 9 în baza 10.
Dacă din fișierul atestat.in se citesc numerele:
10
14 9 35 27 78 2 10 11 17 36
Se vor afișa numerele 2 9 10 35
Răspunsuri la întrebare
Răspuns:
#include <iostream>
#include <fstream>
using namespace std;
int main()
{ ifstream f("atestat.in");
int n, a[100],zero,unu;
//citesc n din fisier, apoi cele n numere le memorez in vectorul a
f>>n;
for(int i=0;i<n;i++)
f>>a[i];
//ordonez crescator vectorul a
for (int i=0;i<n-1;i++)
for (int j=i+1;j<n;j++)
if (a[i]>a[j])
{
int aux=a[i];
a[i]=a[j];
a[j]=aux;
}
//in variabila zero retin numarul de 0-uri din desc in baza 2
//in var unu retin nr de 1 din desc in baza 2 a fiecarui element a[i]
//daca zero==unu atunci afisez numarul
for (int i=0;i<n;i++)
{int k =a[i];
zero=0; unu=0;
while (k!=0)
{
if(k%2==0) zero++; else unu++;
k=k/2;
}
if (zero==unu) cout<<a[i]<<" ";
}
return 0;
}
Explicație: