Informatică, întrebare adresată de roxanamariafaur, 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 10p (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
crescă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
4
100 100000 1 100000 1000 100 10 100
atunci pe ecran se afișează valoarea
1000
a) Descrieţi în limbaj natural algoritmul utilizat, justificând eficienţa acestuia. (4p.)
b) Scrieţi programul C/C++ corespunzător algoritmului descris

Răspunsuri la întrebare

Răspuns de ardyarde
2
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;

int main()
{
    int n,x,i,ok=1;
    int a[10]={0};
    ifstream fisier("bac.txt");
    fisier>>n;
    while(fisier>>x)
        a[(int)log10(x)]++;
    fisier.close();
    x=0;
    i=0;
    while(x!=n)
    {
    if(a[i]>0)
        x++;
    i++;
    if(i==10)
      {
        cout<<"Nu exista";
        ok=0;
        break;
      }
    }
    if(ok)
    cout<<pow(10,i-1);
return 0;
}

roxanamariafaur: Mersi!Cu restul m-am descurcat pana la final .Doar cea cu cel mai mare divizor si cel mai mic multiplu nu am reusit sa o fac
Alte întrebări interesante