0520 - Secventa2: Difference between revisions

From Bitnami MediaWiki
Flaviu (talk | contribs)
No edit summary
Flaviu (talk | contribs)
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 ==  
Programul va afișa pe ecran numărul C, reprezentând valoarea cerută.
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 citire():
def validate_input(n, x):
    n = int(input())
  if n < 1 or n > 1000:
    x = list(map(int, input().split()))
  print("Datele nu corespund restricțiilor impuse.")
    m = int(input())
  return False
    y = list(map(int, input().split()))
  if not any(num % 2 == 1 for num in x):
    return n, x, m, y
  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 secventa_in_x(n, x, m, y):
def sum_odd_elements(n, x):
    cnt = 0
first_odd = -1
    for i in range(n - m + 1):
last_odd = -1
        if x[i:i+m] == y:
for i in range(n):
            cnt += 1
  if x[i] % 2 == 1:
    return cnt
  if first_odd == -1:
  first_odd = i
  last_odd = i
return sum(x[first_odd:last_odd+1])


def validare(cnt):
def read_input():
    print(cnt)
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__":
if name == 'main':
    n, x, m, y = citire()
n, x = read_input()
    cnt = secventa_in_x(n, x, m, y)
if n is not None and x is not None:
    validare(cnt)
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>

  1. 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ă.