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

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 de numedeutilizator5
1

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.

Alte întrebări interesante