# PBinfo #967 – Cifre8 – Rezolvare C++

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

## Enunț

Fie c o cifră, iar s un şir de n numere naturale. Utilizând toate cifrele impare ale unităţilor numerelor din s,  se construieşte un nou şir de numere naturale v cu proprietăţile următoare:


toate numerele din şirul v au  acelaşi număr de cifre
fiecare număr din v este format doar din cifre identice
şirul v este format din cel mai mic număr de valori naturale care au proprietăţile 1. şi 2.

Cerinţe
Scrieţi un program care să citească numerele c, n şi şirul s, şi să determine:
a) suma tuturor numerelor din şirul s care au proprietatea că sunt numere prime 
b) numărul de apariţii ale cifrei c în scrierea zecimală a tuturor numerelor din şirul s
c) numărul minim de numere din şirul v

Date de intrare
Programul citește de la tastatură numerele n c, iar apoi cele n elemente ale șirului s.

Date de ieșire
Programul va afișa pe ecran trei numere, câte unul pe o linie, reprezentând în ordine:


suma tuturor numerelor din şirul s care au proprietatea că sunt numere prime
numărul de apariţii ale cifrei c în scrierea zecimală a tuturor numerelor din şirul s
numărul minim de valori din şirul v

Restricții și precizări

Numerele n şi c sunt naturale
2 ≤ n ≤ 10000
0 ≤ c ≤ 9
toate cele n numere naturale din şirul s sunt mai mici sau egale cu 30000
pentru rezolvarea cerinţei   a) se  acordă 40% din punctaj, pentru cerinţa b) 20% din punctaj  şi  pentru  cerinţa c) 40% din punctaj.

Exemplu:
Intrare

10 9
1943 31 19 1199 34 941 7971 131 223 6
Ieșire

1345
6
4
Explicație
a) numerele prime din şirul s sunt: 31, 19, 941, 131 şi 223. Suma acestora este 1345.
b) cifra c=9 apare de 6 ori în scrierea numerelor din s.
c) cifrele impare ale unităţilor numerelor din s sunt, în ordine crescătoare: 1, 1, 1, 1, 3, 3, 9, 9. Se pot forma minimum 4 numere cu toate cifrele identice: 11, 11, 33, 99, fiecare număr din noul şir având numărul maxim posibil de cifre, adică 2. Numărul minim de termeni ai şirului este egal cu 4.

## Cod sursă C++

```cpp
#include <bits/stdc++.h>
using namespace std;
int c, n, S = 0, contor = 0, numere = 0;
int c1, c3, c5, c7, c9;
int prim(int a) {
    if (a < 2) return 0;
    if (a == 2) return 1;
    if (a % 2 == 0) return 0;
    for (int d = 3; d * d <= a; d = d + 2)
        if (a % d == 0)
            return 0;
    return 1;
}
int apar(int a, int c) {
    int contor = 0;
    while (a > 0) {
        if (a % 10 == c)
            contor++;
        a = a / 10;
    } return contor;
}
int func(int cif, int cift) {
    while (cift != 0) {
        int r = cif % cift;
        cif = cift;
        cift = r;
    } return cif;
}
int main() {
    cin >> n >> c;
    for (int i = 1; i <= n; i++) {
        int temp;
        cin >> temp;
        if (prim(temp))
            S = S + temp;
        contor = contor + apar(temp, c);
        if (temp % 2 == 1)
            if (temp % 10 == 1)
                c1++;
            else if (temp % 10 == 3)
                c3++;
            else if (temp % 10 == 5)
                c5++;
            else if (temp % 10 == 7)
                c7++;
            else
                c9++;
    } cout << S << "\n";
    cout << contor << "\n";
    int cif = c1, cift = c3;
    cif = func(cif, cift);
    cift = c5;
    cif = func(cif, cift);
    cift = c7;
    cif = func(cif, cift);
    cift = c9;
    cif = func(cif, cift);
    numere = c1 / cif + c3 / cif + c5 / cif + c7 / cif + c9 / cif;
    cout << numere;
    return 0;
}
```

## Resurse

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