0516 - SumSec1: Difference between revisions
No edit summary |
No edit summary |
||
Line 74: | Line 74: | ||
== Explicație rezolvare== | == Explicație rezolvare== | ||
Funcția | Funcția citeste_date_intrare() citește cele două tablouri A și B din intrare și le returnează ca o pereche de liste. Funcția valideaza_datele_intrare(a, b) verifică dacă cele două liste respectă constrângerile impuse de problemă și returnează True dacă da și False altfel. Funcția se_poate_reduce(a, b) verifică dacă tabloul A se poate reduce la tabloul B și returnează True dacă da și False altfel. | ||
În funcția principală (if __name__ == '__main__':) se citește numărul de seturi de date de test t, apoi se parcurg t iterații pentru a procesa fiecare set de date. Se citesc cele două tablouri, se validează și se verifică dacă A se poate reduce la B și se afișează rezultatul. | |||
Revision as of 18:16, 27 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
Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele sunt introduse corect.", apoi pe un rând nou numărul c, 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
- Intrare
- 8
- 12 10 15 6 7 10 19 14
- Ieșire
- Datele nu corespund restricțiilor impuse.
- 5 4
Rezolvare
Rezolvare ver. 1
<syntaxhighlight lang="python" line>
- 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))
</syntaxhighlight>
Explicație rezolvare
Funcția citeste_date_intrare() citește cele două tablouri A și B din intrare și le returnează ca o pereche de liste. Funcția valideaza_datele_intrare(a, b) verifică dacă cele două liste respectă constrângerile impuse de problemă și returnează True dacă da și False altfel. Funcția se_poate_reduce(a, b) verifică dacă tabloul A se poate reduce la tabloul B și returnează True dacă da și False altfel.
În funcția principală (if __name__ == '__main__':) se citește numărul de seturi de date de test t, apoi se parcurg t iterații pentru a procesa fiecare set de date. Se citesc cele două tablouri, se validează și se verifică dacă A se poate reduce la B și se afișează rezultatul.