0802 – Sum Imp K
Sursa: SumImpK
Cerinţă
Se dă un șir cu n elemente întregi. Să se facă suma primelor k numere impare din șir. Dacă nu există k elemente impare în șir se va returna un mesaj de eroare.
Date de intrare
Programul va citi de la tastatură două valori n k cu semnificația precizată, apoi n numere întregi reprezentând elementele șirului.
Date de ieșire
Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele introduse sunt corecte!", apoi se va afișa suma primelor k elemente impare, dacă exsită k elemente impare în șir. În cazul în care datele nu respectă restricțiile, se va afișa mesajul "Datele introduse nu sunt corecte!".
Restricţii şi precizări
- 2 < n < 50
- valorile elementelor șirului vor fi < 10.000
- 0 < k <= n
Exemple
Exemplul 1
- Intrare
- Introduceti numarul de elemente: 5
- Introduceti 5 numere de maxim 4 cifre separate prin spatiu:1 1 1 1 1
- Introduceti un nr k: 3
- Ieșire
- Datele introduse sunt corecte!
- Suma este: 3
Exemplul 2
- Intrare
- Introduceti numarul de elemente: 5
- Introduceti 5 numere de maxim 4 cifre separate prin spatiu:1 3 2 6 4
- Introduceti un nr k: 3
- Ieșire
- Datele introduse sunt corecte!
- Nu exista destule elemente impare
Exemplul 3
- Intrare
- Introduceti numarul de elemente: 5
- Introduceti 5 numere de maxim 4 cifre separate prin spatiu:1 56 3 1 21
- Introduceti un nr k: 6
- Ieșire
- Datele introduse sunt incorecte!
Rezolvare
<syntaxhighlight lang="python" line="1"> def is_integer(value):
return value.isdigit()
def verificare_nr_elemente(n):
if is_integer(n):
if 3 <= int(n) <= 49:
return n
else:
print("Datele introduse sunt incorecte!")
exit()
else:
print("Datele introduse sunt incorecte!")
exit()
def k_valid(k, n):
if is_integer(k):
if int(k) <= int(n):
return True
else:
print("Datele introduse sunt incorecte!")
else:
print("Datele introduse sunt incorecte!")
def verificare_vector(n, vector):
if len(vector) != int(n):
print("Datele introduse sunt incorecte!")
exit()
else:
for i in vector:
if is_integer(i):
if int(i) <= 10000:
continue
else:
print("Datele introduse sunt incorecte!")
exit()
else:
print("Datele introduse sunt incorecte!")
exit()
def suma_primele_k_elemente_impare(lst, k):
count = 0
suma = 0
for num in lst:
if num % 2 == 1:
suma += num
count += 1
if count == int(k):
print("Suma este: ", suma)
exit()
if count < int(k):
print("Nu exista destule elemente impare")
if __name__ == '__main__':
n = input("Introduceti numarul de elemente: ")
verificare_nr_elemente(n)
elem = input(f"Introduceti {n} numere de maxim 4 cifre separate prin spatiu:").split()
verificare_vector(n, elem)
lst_int = list(map(int, elem))
k = input("Introduceti un nr k: ")
k_valid(k, n)
print("Datele introduse sunt corecte!")
suma_primele_k_elemente_impare(lst_int, k)
</syntaxhighlight>
Explicație rezolvare
Acest program preia ca intrare un număr n de elemente, n numere separate prin spațiu și un număr k. Programul calculează suma primelor k elemente impare dintre cele n numere introduse. Programul conține mai multe funcții care validează și verifică dacă datele introduse sunt corecte, înainte de a efectua operația de calcul a sumei.
is_integer(value): Verifică dacă valoarea introdusă este un număr întreg.verificare_nr_elemente(n): Verifică dacăneste un număr întreg între 3 și 49. Dacă nu, programul se oprește.k_valid(k, n): Verifică dacăkeste un număr întreg mai mic sau egal cun. Dacă nu, afișează un mesaj de eroare.verificare_vector(n, vector): Verifică dacă lungimea vectorului este egală cunși dacă toate elementele din vector sunt numere întregi mai mici sau egale cu 10000. Dacă nu, programul se oprește.suma_primele_k_elemente_impare(lst, k): Calculează suma primelorkelemente impare din listalst. Dacă nu există suficiente elemente impare în lista, afișează un mesaj corespunzător.
În secțiunea if __name__ == '__main__', programul execută următoarele acțiuni:
- Preia numărul
nde elemente de la utilizator și verifică dacă este valid. - Preia
nnumere de la utilizator, separate prin spațiu, și verifică dacă sunt valide. - Convertește elementele în numere întregi și le stochează în lista
lst_int. - Preia numărul
kde la utilizator și verifică dacă este valid. - Afișează un mesaj care indică faptul că datele introduse sunt corecte.
- Calculează și afișează suma primelor
kelemente impare din listalst_int.