Enunt
Mircea este pasionat de programare. El a început să rezolve probleme din ce în ce mai grele. Astfel a ajuns la o problemă, care are ca date de intrare un tablou pătratic cu n
linii şi n
coloane, componente tabloului fiind toate numerele naturale distincte de la 1
la n
2
. Pentru a verifica programul pe care l-a scris îi trebuie un fişier care să conţină tabloul respectiv. După ce a creat acest fişier, fratele său, pus pe şotii îi umblă în fişier şi îi schimbă câteva numere consecutive, cu numărul 0
. Când se întoarce Mircea de la joacă constată cu stupoare că nu îi merge programul pentru testul respectiv. După câteva ore de depanare îşi dă seama că programul lui este corect şi că fişierul de intrare are probleme.
Cerința
Scrieţi un program care să-l ajute pe Mircea, găsindu-i cel mai mic şi cel mai mare dintre numerele consecutive schimbate de fratele său.
Date de intrare
În fişierul numere9.in
se dă pe prima linie n
, iar pe următoarele n
linii elementele tabloului, câte n
elemente pe o linie, separate între ele prin câte un spaţiu, după modificările făcute de fratele lui Mircea.
Date de ieșire
În fişierul numere9.out
se va scrie pe un singur rând cu un singur spaţiu între ele numerele cerute (primul fiind cel mai mic).
Restricții și precizări
0<n≤500
- Fratele lui Mircea schimbă cel puţin un număr în fişier.
- Numerele schimbate de fratele lui Mircea sunt mai mici sau cel mult egale cu
60000
.
Exemplu
numere9.in
3 5 0 7 0 0 1 6 9 8
numere9.out
2 4
Explicație
În fişierul de intrare au fost înlocuite cu 0
numerele 2
, 3
, 4
.
#include <bits/stdc++.h> using namespace std; ifstream cin("numere9.in"); ofstream cout("numere9.out"); int main() { int n , x , p = 0 , f[60000]={0} , ok = 0 , nr1 , nr2; cin >> n; for(int i = 0 ; i < n ; ++i) { for(int j = 0 ; j < n ; ++j) { cin >> x; if(x > p && x<= 60000) p = x; if(x <= 60000)f[x]++; } } if(p < n * n && p != 60000) p = n * n; for(int i = 1 ; i <= p ; ++i) { if(f[i]==0 && ok==0) { nr1 = i; ok++; } if(f[i]==0) nr2 = i; } cout << nr1 << " " << nr2; }