Maxime și minime multiple

1.Minim

#include <iostream>
#include <climits>

using namespace std;

int main()
{
    int v[101],min1=INT_MAX,min2=INT_MAX,i,n;
    cin>>n;
    for(i=1;i<=n;++i)cin>>v[i];
    for(i=1;i<=n;++i)
    {
        if(v[i]<min1)
        {
            min2=min1;
            min1=v[i];
        }
        else if(v[i]<min2)min2=v[i];
    }
    cout<<min1<<" "<<min2;
    return 0;
}

2.Maxim

#include <iostream>
#include <climits>

using namespace std;

int main()
{
    int v[101],max1=INT_MIN,max2=INT_MIN,i,n;
    cin>>n;
    for(i=1;i<=n;++i)cin>>v[i];
    for(i=1;i<=n;++i)
    {
        if(v[i]>max1)
        {
            max2=max1;
            max1=v[i];
        }
        else if(v[i]>max2)max2=v[i];
    }
    cout<<max1<<" "<<max2;
    return 0;
}

Dacă avem nevoie de prea multe valori maxime sau minime, în loc să luăm mai multe variabile vom ordona vectorul (des)crescător și vom afișa numărul de maxime/minime necesar.

Maxime și minime simple

1.Minim

#include <iostream>
#include <climits>

using namespace std;

int main()
{
    int v[101],min=INT_MAX,i,n;
    cin>>n;
    for(i=1;i<=n;++i)
    {
        cin>>v[i];
        if(v[i]<min)min=v[i];
    }
    cout<<min;
    return 0;
}

2.Maxim

#include <iostream>
#include <climits>

using namespace std;

int main()
{
    int v[101],max=INT_MIN,i,n;
    cin>>n;
    for(i=1;i<=n;++i)
    {
        cin>>v[i];
        if(v[i]>max)max=v[i];
    }
    cout<<max;
    return 0;
}

Numărul de apariţii al minimului sau al maximului

Pentru a afla numărul de apariţii al cifrei maxime sau minime a unui număr, mai întâi vom face o copie cu ajutorul căreia vom afla această cifră, după care vom compara fiecare cifră cu max/min, iar de fiecare dată când se va găsi o cifră egală cu max/min unei variabile iniţializate cu 0 i se va adăuga 1. Această variabilă va reprezenta la sfârşit numărul de apariţii al max/min.

Algoritmul în C++

#include 

using namespace std;

int main()
 {
     unsigned x,x1,max=0,k=0;
     cin>>x;
     x1=x;
     while(x1!=0)
     {
         if(x1%10>max)max=x1%10;
         x1=x1/10;
     }
     while(x!=0)
     {
         if(x%10==max)k++;
         x=x/10;
     }
     cout<<k;
     return 0;
 }

Cele mai mari/mici 2/3 cifre

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 “<“.

Maximul şi minimul a n numere

Există 3 metode prin care putem afla maximul şi minimul a n numere.

1. Prin utilizarea următoarelor formule:

max(x,y)=(x+y+|x-y|)/2

min(x,y)=(x+y-|x+y|)/2

Astfel, se va afla maximul sau minimul primelor 2 numere, apoi cel dintre numărul obţinut şi următorul număr, până ce se ajunge la ultimul.

(exemplu) Scrieţi un algoritm care să calculeze şi să afişeze maximul dintre 4 numere.

D.I.: x, y, z, t

D.O.: max(x,y,z,t)

start

citeşte x,y,z,t

max1←(x+y+abs(x-y))/2

max2←(max1+z+abs(max1-y))/2

max←(max2+t+abs(max2-t))/2

scrie max

stop

 

2. Prin utilizarea structurii alternative cu două instrucţiuni.

start

citeşte x,y,z,t

dacă x>y atunci max1←x

altfel max1←y

dacă max1>z atunci max2←max1

altfel max2←z

dacă max2>t atunci max←max2

altfel max←t

scrie max

stop

 

3. Prin atribuirea primului număr maximului sau minimului şi utilizarea structurii alternative cu o instrucţiune (comparaţii succesive).

start

citeşte x,y,z,t

max←x

dacă y>max atunci max←y

dacă z>max atunci max←z

dacă t>max atunci max←t

scrie max

stop