0516 - SumSec1: Diferență între versiuni
Etichetă: Anulare |
Fără descriere a modificării |
||
Linia 7: | Linia 7: | ||
== Date de ieșire == | == Date de ieșire == | ||
Dacă datele sunt introduse corect, pe ecran se va afișa: | Dacă datele sunt introduse corect, pe ecran se va afișa: | ||
'''"Datele sunt introduse corect."''', apoi pe un rând nou '''numărul | '''"Datele sunt introduse corect."''', apoi pe un rând nou '''va fișa pe ecran numărul S, reprezentând suma calculată''', reprezentând valoarea cerută. În cazul contrar, se va afișa pe ecran: '''"Datele nu corespund restricțiilor impuse."'''. | ||
== Restricţii şi precizări == | == Restricţii şi precizări == | ||
Linia 13: | Linia 13: | ||
* elementele vectorului vor fi mai mici decât 1.000.000 | * elementele vectorului vor fi mai mici decât 1.000.000 | ||
* vectorul va conţine cel puțin un element impar | * vectorul va conţine cel puțin un element impar | ||
== Exemplu == | == Exemplu 1 == | ||
; Intrare | ; Intrare | ||
:8 | : 8 | ||
: 12 10 15 6 7 10 19 14 | : 12 10 15 6 7 10 19 14 | ||
; Ieșire | |||
: Datele sunt introduse correct. | |||
: 5 4 | |||
== Exemplu 2 == | |||
; Intrare | |||
: 2 | |||
: 1 2 3 4 5 6 | |||
; Ieșire | ; Ieșire | ||
: Datele nu corespund restricțiilor impuse. | : Datele nu corespund restricțiilor impuse. | ||
: | : 6 7 | ||
== Rezolvare == | == Rezolvare == |
Versiunea de la data 3 mai 2023 07:15
Sursa: https://www.pbinfo.ro/probleme/516/sumsec1 0516 - SumSec1]
Cerinţa
Se dă un vector format din n elemente, numere naturale. Calculați suma elementelor din secvența determinată de primul și ultimul element impar.
Date de intrare
Programul va citi de la tastatură numărul n, apoi cele n elemente ale vectorului.
Date de ieșire
Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele sunt introduse corect.", apoi pe un rând nou va fișa pe ecran numărul S, reprezentând suma calculată, reprezentând valoarea cerută. În cazul contrar, se va afișa pe ecran: "Datele nu corespund restricțiilor impuse.".
Restricţii şi precizări
- 1 ≤ n ≤ 1000
- elementele vectorului vor fi mai mici decât 1.000.000
- vectorul va conţine cel puțin un element impar
Exemplu 1
- Intrare
- 8
- 12 10 15 6 7 10 19 14
- Ieșire
- Datele sunt introduse correct.
- 5 4
Exemplu 2
- Intrare
- 2
- 1 2 3 4 5 6
- Ieșire
- Datele nu corespund restricțiilor impuse.
- 6 7
Rezolvare
Rezolvare ver. 1
# 0516 - SumSec1
def validate_input(n, v):
if n < 1 or n > 1000:
print("Datele nu corespund restricțiilor impuse.")
return False
if not any(x % 2 == 1 for x in v):
print("vectorul trebuie sa contina cel putin un element impar")
return False
for i in range(n):
if v[i] < 1 or v[i] > 1000000:
print("Datele nu corespund restricțiilor impuse.")
return False
return True
def suma_elemente_impare(n, v):
first_odd = -1
last_odd = -1
for i in range(n):
if v[i] % 2 == 1:
if first_odd == -1:
first_odd = i
last_odd = i
return sum(v[first_odd:last_odd+1])
def read_input():
try:
n = int(input("Introduceti valoarea lui n: "))
v = list(map(int, input("Introduceti valorile vectorului, separate prin spatiu: ").split()))
if not validate_input(n, v):
print("Datele nu corespund restricțiilor impuse.")
return None, None
print("Datele sunt introduse corect.")
return n, v
except ValueError:
print("Datele nu corespund formatului așteptat.")
return None, None
if __name__ == '__main__':
n, v = read_input()
if n is not None and v is not None:
print(suma_elemente_impare(n, v))
Explicație rezolvare
Funcția validate_input primește numărul de elemente n și vectorul v și verifică dacă acestea respectă restricțiile impuse. Dacă se găsește o problemă, se va afișa un mesaj de eroare și se va returna False. Altfel, se va returna True.
Funcția suma_elemente_impare primește numărul de elemente n și vectorul v și calculează suma elementelor dintre primul și ultimul element impar din vector.
Funcția read_input primește datele de intrare și le validează folosind funcția validate_input. Dacă datele sunt valide, acestea vor fi returnate într-un tuplu.
În final, în blocul if __name__ == '__main__', se va apela funcția read_input pentru a citi datele de intrare, apoi funcția suma_elemente_impare pentru a calcula suma și se va afișa rezultatul pe ecran.