VA ROG . MIATI PUTEA EXPLICA SI CE FACEȚI??
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, cel mai mare număr de două cifre
distincte care NU se află în fișier. Dacă nu există un astfel de număr, 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 numărul 97.
a. Descrieți în limbaj natural algoritmul proiectat, justificând eficiența acestuia. (2p.)
b. Scrieți programul C/C++ corespunzător algoritmului proiectat.
Răspunsuri la întrebare
Răspuns:
#include <iostream>
#include <fstream> //asta e librăria prin care se inițializează citrea din fișier
using namespace std;
int main()
{
ifstream f("bac.in"); //aici deschizi fișierul pentru a citi din el
int x,fr[110]={0},i,ok=0; //inițializezi un șir cu toate valorile 0 de la început
while (!f.eof()) // se repetă până când nu mai sunt elemente în fișier
{
f>>x; //citești câte un număr
fr[x]++; //la fiecare apariție, valoarea din șir crește (0,1, etc)
}
i=98; //începi să cauți de la 98 pentru că 99 nu are cifrele distincte
while (i>=10 && ok==0) //cauți cât timp nu găsești unul (ok==0)
{
if (fr[i]==0 && i%10 != i/10) //dacă valoarea din șir e 0, înseamnă că numărul nu se află în șir, dar verifici și dacă ultima cifră e diferită de prima
{
cout << i; //îl scrii
ok=1; //faci ok 1 pentru a ieși din repetiție, adică ai găsit numărul
}
}
f.close(); //închizi fișierul
return 0;
}
Explicație:
Am încercat să explic cât de detaliat se poate, probabil știi și tu ceva din ce am scris dar m-am gândit să fie cât mai clar.