0520 - Secventa2
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ă.