0516 - SumSec1: Difference between revisions
Pagină nouă: 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 == Programul va fișa pe ecran numărul S, reprezentând suma calculată. == Restricţii şi precizări == * 1 ≤ n... |
No edit summary |
||
Line 19: | Line 19: | ||
== Rezolvare == | == Rezolvare == | ||
def validate_input(n, v): | |||
if n < 1 or n > 1000: | |||
print("n nu respecta restricțiile 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("valorile din v nu respecta restricțiile 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(): | |||
n = int(input()) | |||
v = list(map(int, input().split())) | |||
if not validate_input(n, v): | |||
exit() | |||
return n, v | |||
if __name__ == '__main__': | |||
n, v = read_input() | |||
print(suma_elemente_impare(n, v)) | |||
=== Rezolvare ver. 1 === | === Rezolvare ver. 1 === | ||
<syntaxhighlight lang="python" line> | <syntaxhighlight lang="python" line> | ||
Line 44: | Line 79: | ||
print(sum) | print(sum) | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== 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. |
Revision as of 19:40, 17 April 2023
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
Programul va fișa pe ecran numărul S, reprezentând suma calculată.
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
- Intrare
- 8
- 12 10 15 6 7 10 19 14
- Ieșire
- 5 4
Rezolvare
def validate_input(n, v):
if n < 1 or n > 1000: print("n nu respecta restricțiile 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("valorile din v nu respecta restricțiile 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():
n = int(input()) v = list(map(int, input().split())) if not validate_input(n, v): exit() return n, v
if __name__ == '__main__':
n, v = read_input() print(suma_elemente_impare(n, v))
Rezolvare ver. 1
<syntaxhighlight lang="python" line>
- 0516 - SumSec1
n = int(input("Introduceți numărul de elemente din vector: ")) v = list(map(int, input("Introduceți elementele vectorului: ").split()))
- Căutăm primul și ultimul element impar din vector
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
- Calculăm suma elementelor din secvența dată
sum = 0 if first_odd != -1 and last_odd != -1:
for i in range(first_odd, last_odd + 1): sum += v[i]
- Afisăm suma
print(sum) </syntaxhighlight>
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.