Cerinţa
Să se scrie un program care citește un șir de n numere naturale şi determină cele mai mari două numere din şir.
Date de intrare
Programul citește de la tastatură numărul n, iar apoi n numere naturale nenule.
Date de ieşire
Programul afișează pe ecran numerele x y, reprezentând valorile cerute, separate prin exact un spaţiu.
Restricţii şi precizări
2 ≤ n ≤ 1000
cele n numere citite vor fi mai mici decât 2.000.000.000
valorile afişate respectă relaţia x ≥ y
Exemplu
Intrare
5
72 30 12 75 17
Ieșire
75 72
Salut! Va rog mult sa ma ajutati la aceasta problema. Nu reusesc sa o fac de 100 de puncte pe pbinfo. Este problema #119. As dorii si explicatii la fiecare pas al problemei
Răspunsuri la întrebare
#include <iostream>
using namespace std;
int main()
{
int n,i,x,a=-1,b=-1;
cin >> n;
for (i=1; i<=n; i++)
{
cin >> x;
if (x>b)
{
a=b;
b=x;
}
else if (x>a) a=x;
}
cout << b << ' ' << a;
return 0;
}
citești n
cu for de la 1 la n citești cele n numere
numărul citit este x, variabila
inițializezi a, b, 2 variabile cu -1 ( orice număr mai mic ca 0 )
•a și b o sa devina cele 2 maxime
-1 ptr că numerele citite sunt naturale. când trebuie sa afli maxim inițializezi cu minim, când trebuie sa afli minim inițializezi cu o valoare maximă
după ce citești primul număr îl compari cu maximul tau, adică cu b
daca este mai mare, maximul primește valoarea, și maximul2 ( a ) primește b
intra pe else if când numărul nu este mai mare decât b
pe exemplu:
5
72 30 12 75 17
72 > -1 deci a = -1, b = 72
nu intra in else if
30 nu este mai mare decât b, b fiind maximum tau
la fel și la 12
apoi 75
75 > 72 deci a = 72, iar b primește 75
observi că din If a rămâne -1 până când găsești un număr mai mare ca decât primul număr citit
daca ai de exemplu
5
5 4 3 2 1
îl citește pe 5, b = 5
și apoi intra doar in else if,
daca 4 > -1
-1 = 4 ( algoritmul clasic ptr aflare a maximului )
sper că înțelegi, la mine in cap are mai multa logica
codul e diferit față de ce ți-am mai trimis, e scris de când eram la îenceput :)