0520 - Secventa2: Difference between revisions
No edit summary |
No edit summary |
||
Line 6: | Line 6: | ||
Programul citește de la tastatură numărul n, iar apoi n numere naturale, elementele vectorului x, apoi numărul m, iar apoi m numere naturale, elementele vectorului y. | Programul citește de la tastatură numărul n, iar apoi n numere naturale, elementele vectorului x, apoi numărul m, iar apoi m numere naturale, elementele vectorului y. | ||
== Date de ieșire == | == 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 == | == Restricţii şi precizări == | ||
* 1 ≤ m ≤ n ≤ 1000 | * 1 ≤ m ≤ n ≤ 1000 | ||
Line 16: | Line 17: | ||
: 8 5 8 | : 8 5 8 | ||
; Ieșire | ; Ieșire | ||
: Datele nu corespund restricțiilor impuse. | |||
: 3 | : 3 | ||
Line 23: | Line 25: | ||
# 0520 - Secventa2 | # 0520 - Secventa2 | ||
def | def validate_input(n, x): | ||
if n < 1 or n > 1000: | |||
print("Datele nu corespund restricțiilor impuse.") | |||
return False | |||
if not any(num % 2 == 1 for num in x): | |||
print("vectorul trebuie sa contina cel putin un element impar") | |||
return False | |||
for num in x: | |||
if num < 1 or num > 1000000: | |||
print("Datele nu corespund restricțiilor impuse.") | |||
return False | |||
return True | |||
def | def sum_odd_elements(n, x): | ||
first_odd = -1 | |||
last_odd = -1 | |||
for i in range(n): | |||
if x[i] % 2 == 1: | |||
if first_odd == -1: | |||
first_odd = i | |||
last_odd = i | |||
return sum(x[first_odd:last_odd+1]) | |||
def | def read_input(): | ||
try: | |||
n = int(input("Introduceti valoarea lui n: ")) | |||
x = list(map(int, input("Introduceti valorile vectorului, separate prin spatiu: ").split())) | |||
if not validate_input(n, x): | |||
print("Datele nu corespund restricțiilor impuse.") | |||
return None, None | |||
print("Datele sunt introduse corect.") | |||
return n, x | |||
except ValueError: | |||
print("Datele nu corespund formatului așteptat.") | |||
return None, None | |||
if | if name == 'main': | ||
n, x = read_input() | |||
if n is not None and x is not None: | |||
print(sum_odd_elements(n, x)) | |||
Revision as of 17:51, 27 April 2023
Sursa: 0520 - Secventa2
Cerinţa
Se dă un vector x cu n elemente, numere naturale și un vector y cu m elemente, numere naturale. Să se determine de câte ori este vectorul y secvență în vectorul x.
Date de intrare
Programul citește de la tastatură numărul n, iar apoi n numere naturale, elementele vectorului x, apoi numărul m, iar apoi m numere naturale, elementele vectorului y.
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 ≤ m ≤ n ≤ 1000
Exemplu
- Intrare
- 10
- 8 5 8 5 8 3 8 5 8 6
- 3
- 8 5 8
- Ieșire
- Datele nu corespund restricțiilor impuse.
- 3
Rezolvare
Rezolvare ver. 1
<syntaxhighlight lang="python" line>
- 0520 - Secventa2
def validate_input(n, x):
if n < 1 or n > 1000: print("Datele nu corespund restricțiilor impuse.") return False if not any(num % 2 == 1 for num in x): print("vectorul trebuie sa contina cel putin un element impar") return False for num in x: if num < 1 or num > 1000000: print("Datele nu corespund restricțiilor impuse.") return False return True
def sum_odd_elements(n, x):
first_odd = -1 last_odd = -1 for i in range(n): if x[i] % 2 == 1: if first_odd == -1: first_odd = i last_odd = i return sum(x[first_odd:last_odd+1])
def read_input(): try: n = int(input("Introduceti valoarea lui n: ")) x = list(map(int, input("Introduceti valorile vectorului, separate prin spatiu: ").split())) if not validate_input(n, x): print("Datele nu corespund restricțiilor impuse.") return None, None print("Datele sunt introduse corect.") return n, x except ValueError: print("Datele nu corespund formatului așteptat.") return None, None
if name == 'main': n, x = read_input() if n is not None and x is not None: print(sum_odd_elements(n, x))
</syntaxhighlight>
Explicatie Rezolvare
Funcția citire() citește datele de intrare și le returnează ca o tuplă.
Funcția secventa_in_x(n, x, m, y) primește dimensiunile și vectorii x și y și returnează numărul de apariții ale secvenței y în x.
Funcția validare(cnt) afișează numărul de apariții ale secvenței y în x.
La final, avem blocul if __name__ == "__main__": care se ocupă de apelarea funcțiilor în ordinea necesară.