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

239 pbinfo-NrLipsa(cod scris,dar nu afiseaza nimic).Puteti coreta programul va rog??
Cerinţa
Se dau mai multe numere naturale cu cel mult 9 cifre fiecare. Să se determine cele mai mari două numere de 3 cifre care nu se găsesc printre numerele date.

Date de intrare
Fişierul de intrare nrlipsa.in conţine cel mult 100.000 de numere, dispuse pe mai multe linii, numerele de pe fiecare linie fiind separate prin unul sau mai multe spaţii.

Date de ieşire
Fişierul de ieşire nrlipsa.out va conţine pe prima linie cele mai mari două numere de trei cifre care nu apar în fişierul de intrare, ordonate descrescător, separate prin exact un spaţiu.

Restricţii şi precizări
dacă nu există două numere de trei cifre care să nu se afle în fişierul de intrare atunci se va afişa mesajul NU.

Exemplu

nrlipsa.in
12 2345 123 67 989 6 999
123 67 989 999
nrlipsa.out
998 997


#include
#include
using namespace std;

int main()
{
ifstream fin("nrlipsa.in");
ofstream fout("nrlipsa.out");
int x=0;
int n,b=0,a=0;
int fr[100000]={0};
while(fin>>n)
{
fr[n]++;
}
int n2=0;
for(int i=999;i>=100;i--)
{
if(fr[i]==0)
{
if(a==0)
a=i;
else
{
b=i;
break;
}
}
}
if(a==0 && b==0)
{
fout<<"NU";
}
else
fout< return 0;
}
Va rog doar sa corectati programul!!

Răspunsuri la întrebare

Răspuns de bobita25
0

Răspuns:

#include <iostream>

#include <fstream>

using namespace std;

ifstream fin("nrlipsa.in");

ofstream fout("nrlipsa.out");

int main() {

   int n;

   int fr[100000] = {0};

   while (fin >> n) {

       if(n <= 999 && n >= 100)

        fr[n]++;

   }

   int a = 0, b = 0;

   for (int i = 999; i >= 100; i--) {

       if (fr[i] == 0) {

           if (a == 0) {

               a = i;

           } else {

               b = i;

               break;

           }

       }

   }

   if (a == 0 && b == 0) {

       fout << "NU";

   } else {

       fout << a << " " << b;

   }

   return 0;

}

Explicație:

Am îngroșat corecturile făcute asupra codului tău.

  • Am eliminat variabilele x si n2, nefiind utilizate în program și ocupă memorie degeaba.
  • if(n <= 999 && n >= 100) ⇒ În această problemă ne interesează doar numerele de 3 cifre, cuprinse în intervalul [100, 999]. Prin urmare, doar dacă numarul respectiv este în acest interval, atunci vom folosi vectorul caracteristic pentru a reține dacă valoarea apare sau nu în șir.
  • fout << a << " " << b; ⇒ În codul scris de tine, ai doar "fout<", acest lucru ducând la o eroare de compilare a codului. Această secvență va afișa numerele a si b separate prin câte un spațiu.

Codul este de 100 de puncte pe PBINFO.

Baftă la învățat! :)


VxF: „In codul scris de tine, ai doar «fout<»” — Sunt sigur că la el era încă corect. Motorul site-ului crezând că s-a încercat inserarea de link HTML, a eliminat „‹a‹‹" "‹‹b;”. Poveste similară cu „‹iostream›” lipsă la #include.
bobita25: Am inteles. Am mai intalnit acest aspect si in alte intrebari si m-am gandit ca o fi ceva de la site, dar na, de siguranta am scris :))
Alte întrebări interesante