Informatică, întrebare adresată de katerinapp, 9 ani în urmă

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 ardyarde
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;
}
Alte întrebări interesante