Fișierul bac.txt conține pe prima linie un număr natural, n (1≤n≤106
), iar pe a doua linie
cel mult 1000000 de numere naturale de forma 2
p
(0≤p≤9), separate prin câte un spațiu.
Se cere să se afișeze pe ecran numărul care ar apărea pe poziția n în șirul ordonat strict
descrescător obținut din toate numerele distincte aflate pe a doua linie a fișierului. Dacă
șirul are mai puțin de n termeni distincți, se afișează pe ecran mesajul Nu exista.
Pentru determinarea numărului cerut se utilizează un algoritm eficient din punctul de
vedere al timpului de executare.
Exemplu: dacă fişierul bac.txt conţine numerele
3
16 32 1 64 128 32 128 32 32
atunci pe ecran se afișează valoarea
32
a
Răspunsuri la întrebare
Răspuns de
4
# include<iostream>
# include<fstream>
# include<cmath>
using namespace std;
int main()
{
int n, a[10]={0},x,i,ok=0;
ifstream fisier("bac.txt");
fisier>>n;
while(fisier>>x)
a[(int)log2(x)]++;
fisier.close();
x=0;
for(i=9;i>=0;i--)
{
if(a[i]>0)
x++;
if(x==n)
{
cout<<pow(2,i);
ok=1;
break;
}
}
if(ok==0)
cout<<"Nu exista";
return 0;
}
# include<fstream>
# include<cmath>
using namespace std;
int main()
{
int n, a[10]={0},x,i,ok=0;
ifstream fisier("bac.txt");
fisier>>n;
while(fisier>>x)
a[(int)log2(x)]++;
fisier.close();
x=0;
for(i=9;i>=0;i--)
{
if(a[i]>0)
x++;
if(x==n)
{
cout<<pow(2,i);
ok=1;
break;
}
}
if(ok==0)
cout<<"Nu exista";
return 0;
}
Alte întrebări interesante
Matematică,
8 ani în urmă
Engleza,
8 ani în urmă
Limba română,
8 ani în urmă
Matematică,
9 ani în urmă
Matematică,
9 ani în urmă
Limba română,
9 ani în urmă
Matematică,
9 ani în urmă