Pentru a afla cele mai mari sau cele mai mici 2 cifre ale unui număr, vom realiza mai întâi un tabel prin care să înţelegem logica algoritmului pe care urmează să îl scriem. Aici x va fi numărul, cx va fi cifra sa (vom lua pe rând fiecare cifră pentru a vedea care din ele este cea mai mare şi care este a doua cea mai mare), max1 va fi cea mai mare cifră, iar max2 va fi a doua cea mai mare cifră.
Astfel, iniţializăm max1 şi max2 cu 0. Dacă cifra este mai mare decât max1, atunci max2 va primi valoarea curentă a lui max1, iar max1 va primi cifra respectivă. Dacă cifra nu este mai mare decât max1 dar este mai mare decât max2, max2 va primi cifra respectivă. Dacă cifra nu este mai mare nici decât max1, nici decât max2, max1 şi max2 nu se vor schimba.
Exemplu:
x cx max1 max2
0 0 0
986524 4 4 0
98652 2 4 2
9865 5 5 4
986 6 6 5
98 8 8 6
9 9 9 8
Algoritmul în C++
#include
using namespace std;
int main()
{
unsigned x,cx,max1=0,max2=0;
cin>>x;
while(x!=0)
{
cx=x%10;x=x/10;
if(cx>max1)
{
max2=max1;
max1=cx;
}
else if(cx>max2) max2=cx;
}
cout<<max1<<” “<<max2;
return 0;
}
În cazul în care trebuie să aflăm şi a 3-a cea mai mare cifră, vom urma aceeaşi logică, având o nouă variabilă: max3.
#include
using namespace std;
int main()
{
unsigned x,cx,max1=0,max2=0,max3=0;
cin>>x;
while(x!=0)
{
cx=x%10;x=x/10;
if(cx>max1)
{
max3=max2;
max2=max1;
max1=cx;
}
else if(cx>max2)
{
max3=max2;
max2=cx;
}
else if(cx>max3) max3=cx;
}
cout<<max1<<” “<<max2<<” “<<max3;
return 0;
}
Dacă trebuie să aflăm minimul, vom urma aceleaşi etape, doar că min1, min2 şi min3 se vor iniţializa cu 10, iar semnele evident se vor schimba din “>” în “<“.