Rezolvare completă PbInfo #967 Cifre8

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:

  1. toate numerele din şirul v au acelaşi număr de cifre
  2. fiecare număr din v este format doar din cifre identice
  3. ş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.

Cum e corect?

cout < "As la info"; cout << "As la info"; cout >> "As la info";

Felicitări! Poți mai mult?

Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.

Greșit, dar nu-i bai!

Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.

Rezolvare

Iată rezolvarea de 100 de puncte pentru problema Cifre8:

# include <iostream>
using namespace std;

int main()
{
    int n, s, c, sum = 0, nc = 0, c1 = 0, c3 = 0, c5 = 0, c7 = 0, c9 = 0;
    cin >> n >> c;
    for(int i = 1; i <= n ; i ++)
    {
        cin >> s;
        if(s % 10 == 1)
            c1 ++;
        if(s % 10 == 3)
            c3 ++;
        if(s % 10 == 5)
            c5 ++;
        if(s % 10 == 7)
            c7 ++;
        if(s % 10 == 9)
            c9 ++;
        bool prim = true;
        if(s < 2)
            prim = false;
        for(int d = 2 ; d * d <= s && prim ; d ++)
            if(s % d == 0)
                prim = false;
        if(prim)
            sum += s;
        while(s)
        {
            if(s % 10 == c)
                nc ++;
            s /= 10;
        }
    }
    cout << sum << endl << nc << endl;
    int d = 1;
    for(int i = 1 ; i <= n ; i ++)
        if(c1 % i == 0 && c3 % i == 0 && c5 % i == 0 && c7 % i == 0 && c9 % i == 0)
            d = i;
    cout << (c1 + c3 + c5 + c7 + c9)/d << endl;
    return 0;
}

Atenție

Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa Adresa de email.

Rezolvarea problemei #967 Cifre8

Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #967 Cifre8 de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.

Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!