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
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;
}
#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
Limba română,
8 ani în urmă
Engleza,
8 ani în urmă
Biologie,
8 ani în urmă
Limba română,
9 ani în urmă
Informatică,
9 ani în urmă
Chimie,
9 ani în urmă
Matematică,
9 ani în urmă