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

Fişierul text bac.txt conţine pe prima linie numărul natural n, 1≤n≤30000, pe următoarele n linii un tablou unidimensional de n numere întregi, ordonate crescător, iar pe ultima linie două numere întregi a şi b (a≤b) separate de un spaţiu. Fiecare dintre cele n numere, precum şi valorile a şi b, au cel mult patru cifre.

a) Scrieţi un program C/C++, eficient din punct de vedere al timpului de executare, care
afişează pe ecran cel mai mic număr întreg din intervalul închis [a,b] care se găseşte în
tabloul dat. Dacă nu există un astfel de număr programul afişează textul NU.

Exemplu: dacă fişierul bac.txt are conţinutul alăturat,
4
-2
7
11
35
8 15
programul afişează valoarea 11

b) Descrieţi în limbaj natural metoda utilizată şi explicaţi în ce constă eficienţa
ei.

Răspunsuri la întrebare

Răspuns de blindseeker90
2
Aceeasi tehnica precum obtinerea unui minim dintr-un sir.
Se face o variabila min care este egala cu valoarea maxima a intervalului. In acest caz vrem sa verificam faptul ca exista un numar in sir care este in intervalul [a,b] asa ca o sa dam valoarea min=b+1 in afara intervalului
Daca exista un termen din sir care este in [a,b] si acel numar este mai mic decat min, atunci min ia valoarea acelui termen din sir.
Daca la sfarsit, min este egal tot cu b+1, inseamna ca nu a fost vreun termen in intervalul [a,b] si afisam NU, altfel, afisam minimul obtinut
#include <iostream>
#include <fstream>
using namespace std;

int main(){
int a,b,n,x,i,min;
ifstream fib("bac.txt");
fib>>n;
int v[n];
for(i=0;i<n;i++){
fib>>v[i];
}
fib>>a>>b;
min=b+1;
for(i=0;i<n;i++){
if(v[i]>=a&&v[i]<=b){
if(v[i]<min){
min=v[i];
}

}
}
if(min==b+1){
cout<<"NU";
}
else{
cout<<min;
}
return 0;
}
Alte întrebări interesante