Sunteți pe pagina 1din 4

MĂNUȘILE LUI GIGEL

Odată cu venirea iernii, Gigel se hotărăște sa își facă curățenie in sertarul cu


mănuși. Mănușile din sertar sunt în perechi numerotate de la 1 la n. Într-o
pereche ambele mănuși au același număr.

Cerință :
In funcție de primul număr introdus, se va executa una din cerințele de mai jos.

1. Se va găsi numărul de perechi de mănuși din sertar.

2. Se or afișa, in ordine crescătoare, numerele mănușilor ce nu au


pereche.

3. Se vor afișa, ordonate in ordine crescătoare, numerele perechilor


formate.

Date de intrare:
Se va introduce de la tastatură numărul c (=1,2 sau 3), reprezentând numărul cerinței,
numărul n, numărul de mănuși din sertar, iar apoi un șir de n numere naturale cuprinse in
intervalul [1,100].

Date de ieșire:
1. P, numărul de perechi
2. Numerele mănușilor ce nu au perechi, in ordine crescătoare
3. Numerele perechilor formate (fiecare pereche va apărea odată pentru fiecare pereche
formată)

Restricții si precizări:
1≤n≤1000

c=1,2 sau 3

 Program :
#include <iostream>

using namespace std;

int f[101];

int main()

int n,c,i;

cin >> c >> n;

int v[n];

for (i=0; i<n; i++)

cin >> v[i];

f[v[i]]++;

if(c==1)

int p=0;

for (i=1; i<101; i++)

p+= f[i]/2;

cout << p;

else if(c==2)

{
for (i=0; i<101; i++)

if(f[i]%2==1) cout << i << " ";

else

for (i=1; i<101; i++)

for (;f[i]>1; f[i]-=2) cout << i << " ";

return 0;

Explicații :

Vectorul f este un vector de frecvență, care pe poziția x reține câte mănuși se


află cu numărul x în sertar.

Pentru cerința 1, se află suma câturilor împărțirii la 2 a fiecărui număr din f.

Pentru cerința 2, se caută dacă nu este divizibil cu 2 pentru fiecare număr din f.

Pentru cerința 3, se scrie fiecare număr de la 1 la 100 de câte ori


corespondentul său din f poate fi micșorat cu 2 ( adică scoate o pereche) până
când ajunge 1 sau 0 (adică nu mai există perechi rămase).

S-ar putea să vă placă și