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

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 de simulink
2

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:

Alte întrebări interesante