0520 - Secventa2: Difference between revisions
No edit summary |
No edit summary |
||
Line 7: | Line 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 afișa pe ecran numărul C, reprezentând valoarea cerută''', 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 | ||
== Exemplu == | == Exemplu 1 == | ||
; Intrare | ; Intrare | ||
: 10 | : 10 | ||
Line 16: | Line 16: | ||
: 3 | : 3 | ||
: 8 5 8 | : 8 5 8 | ||
; Ieșire | |||
: Datele sunt introduse corect. | |||
: 3 | |||
== Exemplu 2 == | |||
; Intrare | |||
: 11 | |||
: 2 3 4 5 7 1 8 3 2 | |||
: 2 | |||
: 1 2 1 | |||
; Ieșire | ; Ieșire | ||
: Datele nu corespund restricțiilor impuse. | : Datele nu corespund restricțiilor impuse. | ||
: 3 | : 3 | ||
== Rezolvare == | == Rezolvare == | ||
=== Rezolvare ver. 1 === | === Rezolvare ver. 1 === |
Revision as of 07:19, 3 May 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 va afișa pe ecran numărul C, reprezentând valoarea cerută, 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 1
- Intrare
- 10
- 8 5 8 5 8 3 8 5 8 6
- 3
- 8 5 8
- Ieșire
- Datele sunt introduse corect.
- 3
Exemplu 2
- Intrare
- 11
- 2 3 4 5 7 1 8 3 2
- 2
- 1 2 1
- 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ă.