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
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)
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ăn
este un număr întreg între 3 și 49. Dacă nu, programul se oprește.k_valid(k, n)
: Verifică dacăk
este 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 primelork
elemente 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
n
de elemente de la utilizator și verifică dacă este valid. - Preia
n
numere 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
k
de 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
k
elemente impare din listalst_int
.