Rezolvare completă PbInfo #2824 Numere25

Cerința

Se dă un număr natural n și un șir de numere naturale din intervalul [1,n] ordonate crescător. Să se afișeze în ordine strict crescătoare toate numerele din intervalul [1,n] care nu se găsesc în șirul dat. Dacă nu există asemenea numere se afișează Nu exista.

Date de intrare

Fișierul de intrare numere25.in conține pe prima linie numărul n, iar pe a doua linie șir de numere naturale din intervalul [1,n] ordonate crescător.

Date de ieșire

Fișierul de ieșire numere25.out va conține pe prima linie în ordine strict crescătoare toate numerele din intervalul [1,n] care nu se găsesc în șirul dat. Dacă nu există asemenea numere fișierul va conține textul Nu exista.

Restricții și precizări

  • 1 ≤ n ≤ 107;
  • în enunțul original, 1 ≤ n ≤ 109; aici limitele au fost micșorate, datorită dimensiunilor prea mari ale fișierelor de intrare/ieșire;
  • proiectați un algoritm eficient din punctul de vedere al memoriei şi al timpului de executare:
    • se recomandă evitarea utilizării tablourilor sau a altor structuri de date similare.

Exemplu

numere25.in

10
3 4 4 8

numere25.out

1 2 5 6 7 9 10

Cum e corect?

cout < "As la info"; cout << "As la info"; cout >> "As la info";

Felicitări! Poți mai mult?

Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.

Greșit, dar nu-i bai!

Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.

Rezolvare

Iată rezolvarea de 100 de puncte pentru problema Numere25:

#include <iostream>
#include <fstream>
#include <cassert>

using namespace std;

ifstream fin("numere25.in");
ofstream fout("numere25.out");

int main(){
    int n , x , y, gasit = 0;
    fin >> n;
    x = 0;
    while(fin >> y)
    {
        for(int i = x + 1 ; i < y ; i ++)
            fout << i << " ", gasit = 1;
        x = y;
    }
    y = n + 1;
    for(int i = x + 1 ; i < y ; i ++)
        fout << i << " ", gasit = 1;
    if(! gasit)
        fout << "Nu exista";
    fout << "
";
    fin.close();
    fout.close();
    
    return 0;
}

Atenție

Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa Adresa de email.

Rezolvarea problemei #2824 Numere25

Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #2824 Numere25 de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.

Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!