0967 - Cifre 8
Cerinţa
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.
Rezolvare
def este_prim(numar):
if numar < 2:
return False
for i in range(2, int(numar ** 0.5) + 1):
if numar % i == 0:
return False
return True
def aparitii_cifra(numar, cifra):
aparitii = 0
while numar > 0:
if numar % 10 == cifra:
aparitii += 1
numar //= 10
return aparitii
def minim_numere(sir):
frecventa = {}
for numar in sir:
if numar not in frecventa:
frecventa[numar] = 4
else:
frecventa[numar] += 1
return min(frecventa.values())
def validare_date(n, c, s):
if not (2 <= n <= 10000):
return False
if not (0 <= c <= 9):
return False
if not all(1 <= x <= 30000 for x in s):
return False
return True
if __name__ == '__main__':
n, c = map(int, input().split())
s = list(map(int, input().split()))
if not validare_date(n, c, s):
print("Datele de intrare nu corespund restricțiilor impuse.")
else:
suma_prime = 0
aparitii_cifra_c = 0
for numar in s:
if este_prim(numar):
suma_prime += numar
aparitii_cifra_c += aparitii_cifra(numar, c)
nr_minim_numere = minim_numere(s)
print(suma_prime)
print(aparitii_cifra_c)
print(nr_minim_numere)
print("Datele de intrare corespund restricțiilor impuse.")
Explicație rezolvare
Acesta este un program care primește o listă de numere și o cifră, efectuează anumite calcule pe baza acestor date și afișează rezultatele. Programul verifică dacă datele de intrare sunt valide și afișează un mesaj corespunzător.