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ăspuns :

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: