Informatică, întrebare adresată de magdalenapop, 8 ani în urmă

Fișierul bac.in conține cel mult 106 numere naturale din intervalul [0,109], separate prin câte un spațiu. Se cere să se afișeze pe ecran, în ordine descrescătoare, cele mai mari două numere de două cifre distincte care NU se află în fișier. Numerele afișate sunt separate printr-un spațiu, iar dacă nu există două astfel de numere, se afișează pe ecran mesajul nu exista. Proiectați un algoritm eficient din punctul de vedere al timpului de executare.
Exemplu: dacă fișierul bac.in conține numerele 12 235 123 67 98 6 96 94 123 67 98 100
se afișează pe ecran, în această ordine, numerele 97 95.


lucaciucandrei: deci stiu ca ti-a mai dat cineva solutia la problema asta si vreau sa-ti spun 100% ca solutia aia nu e eficienta si e gresita!

Răspunsuri la întrebare

Răspuns de lucaciucandrei
4

#include<iostream>

#include<fstream>

using namespace std;

int main(){

   int v[201]={0}, x, k=2, y[3], j=1;

   ifstream f("bac.in");

   while(f>>x) if(x<=98&&x>=10) v[x]=1;

   for(int i=98;i>=10;i--) if(v[i]==0&&(i%10!=(i/10)%10)) {k--;y[j++]=i;}

   if(k>0) cout<<"nu exista";

   else cout<<y[1]<<' '<<y[2];

   return 0;

}


stefanosmysssy: vezi ca e gresit ca acolo zice sa fie format din 2 cifre distincte
stefanosmysssy: si la tine daca s-ar citi toate numerele pana la 88
stefanosmysssy: l-ar afisa si pe 88
stefanosmysssy: scuze nu citisem tot=))
Alte întrebări interesante