# PBinfo #3403 – produse – Rezolvare C++

Sursa: Codul lui Andrei
Limbaj: C++
Autor rezolvare: andrei

## Enunț

În baza de date a unui magazin online există n produse. Fiecare are un cod numeric, alcătuit din cel mult nouă cifre, cu următoarea semnificație:


prima cifră reprezintă categoria produsului;
a doua cifră reprezintă starea produsului – pară pentru produsele existente pe stoc și impară pentru cele cu stoc epuizat;
restul cifrelor din cod reprezintă identificatorul produsului.

Cerința
Se dau cele n coduri ale produselor din baza de date.

1) Determinați câte produse există pe stoc și câte au stoc epuizat.
2) Pentru fiecare categorie, determinați lista produselor, în ordinea crescătoare a codurilor numerice.

Date de intrare
Fișierul de intrare produse.in conține pe prima linie numerele c n, iar pe a doua linie n numere naturale, separate prin spații, reprezentând codurile produselor.

Date de ieșire
Dacă c=1, fișierul de ieșire produse.out va conține pe prima linie numerele S E, separate printr-un un spațiu, reprezentând numărul de produse existente pe stoc, respectiv numărul de produse cu stoc epuizat.

Dacă c=2, fișierul de ieșire produse.out va conține mai multe linii, câte una pentru fiecare categorie de produs, în ordinea crescătoare a acestora. Fiecare linie începe cu categoria, urmată de un spațiu, apoi de codurile produselor din acea categorie, în ordine crescătoare, separate și ele prin câte un spațiu.

Restricții și precizări

1 ≤ n ≤ 1000;
cele n coduri vor fi mai mari decât 99 și mai mici decât 1.000.000.000;
pentru 30% din teste, c=1.

Exemplul 1
produse.in

1 5
15123 24897 4217 142 2736
produse.out

3 2
Explicație
Produsele existente pe stoc au codurile 24897 4217 142, iar cele cu stoc epuizat au codurile 15123 2736.

Exemplul 2
produse.in

2 5
15123 24897 4217 142 2736
produse.out

1 142 15123
2 2736 24897
4 4217

## Cod sursă C++

```cpp
#include <fstream>
#include <algorithm>
using namespace std;
ifstream in("produse.in");
ofstream out("produse.out");
int primacif(int nr) {
	while (nr > 9)
		nr = nr / 10;
	return nr;
}
int adouacif(int nr) {
	while (nr > 99)
		nr = nr / 10;
	return nr;
}
int main() {
	int v[1001], n, cer;
	in >> cer >> n;
	for (int i = 1; i <= n; ++i)
		in >> v[i];
	if (cer == 1) {
		int par = 0, impar = 0;
		for (int i = 1; i <= n; ++i) {
			int copie = v[i];
			int temp = adouacif(copie);
			if (temp % 2 == 0)
				par++;
			else impar++;
		} out << par << " " << impar;
	} else {
		sort(v + 1, v + n + 1);
		for (int t = 1; t < 10; ++t) {
			bool adv = false;
			for (int i = 1; i <= n; ++i)
				if (primacif(v[i]) == t)
					adv = true;
			if (adv == true) {
				out << t << " ";
				for (int i = 1; i <= n; ++i)
					if (primacif(v[i]) == t)
						out << v[i] << " ";
				 out << "\n";
			}
		}
	} return 0;
}
```

## Resurse

- [Pagina originală](https://codulluiandrei.ro/rezolvari/pbinfo/3403)
- [Sursa C++](https://codulluiandrei.ro/rezolvari/pbinfo/3403/cod.cpp)
- [Sursa pe GitHub](https://raw.githubusercontent.com/codulluiandrei/pbinfo/main/pbinfo-3403/main.cpp)
- [Cursuri de informatică pentru BAC](https://codulluiandrei.ro/academia/info-curs/pachet-cpp/)
