Fisierul bac.in contine un sir de numere naturale distincte, din intervalu [1, 10 la puterea 9]. Numerele din sir sunt separate prin cate un spatiu si cel putin trei dintre ele au penultima cifra 2 si ultima cifra 0. Se cere sa se afiseze pe ecran cele mai mari 3 numere din sir cu proprietatea ca au penultima cifra 2 si ultima cifra 0. Numerele determinate sunt afisate in ordine crescatoare, separate prin cate un spatiu. Proiectati un algoritm eficient din punctul de vedere al memoriei utilizate si al timpului de executare.
Exemplu: daca fisierul contine numerele 9731 50 112 20 8 16 8520 3 2520 1520
pe ecran se vor afisa, in aceasta ordine, numerele: 1520 2520 8520
a. Scrieti programul in C/C++ corespunzator algoritmului proiectat.
b. Descrieti in limbaj natural algoritmul proiectat, justificand eficienta acestuia.
Răspunsuri la întrebare
Răspuns:
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("bac.in");
int main()
{
int x,a,b,c,ok=0,ok1=0,ok2=0;
while(f>>x)
{
if(x%100==20)
{
if(ok2==0)
{if(ok==0)
{a=x;
ok=1;
}
else
if(ok1==0)
{
if(a<x)
{
b=a;
a=x;
}
else
b=x;
ok1=1;
}
else
{
if(b<x)
{
c=b;
b=x;
}
else
c=x;
ok2=1;
}
}
else
{
if(a<=x)
{
c=b;
b=a;
a=x;
}
else
{
if(b<=x)
{
c=b;
b=x;
}
else
if(c<x)
c=x;
}
}
}
}
cout<<c<<" "<<b<<" "<<a;
return 0;
}
Explicație: