0516 - SumSec1: Difference between revisions

From Bitnami MediaWiki
Flaviu (talk | contribs)
Anularea modificării 5040 făcute de Flaviu (Discuție)
Tag: Undo
Flaviu (talk | contribs)
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 c''', reprezentând valoarea cerută. În cazul contrar, se va afișa pe ecran: '''"Datele nu corespund restricțiilor impuse."'''.
'''"Datele sunt introduse corect."''', apoi pe un rând nou '''va fișa pe ecran numărul S, reprezentând suma calculată''', 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 ==
Line 13: Line 13:
* elementele vectorului vor fi mai mici decât 1.000.000
* elementele vectorului vor fi mai mici decât 1.000.000
* vectorul va conţine cel puțin un element impar
* vectorul va conţine cel puțin un element impar
== Exemplu ==
== Exemplu 1 ==
; Intrare
; Intrare
:8
: 8
: 12 10 15 6 7 10 19 14
: 12 10 15 6 7 10 19 14
; Ieșire
: Datele sunt introduse correct.
: 5 4
== Exemplu 2 ==
; Intrare
: 2
: 1 2 3 4 5 6
; Ieșire
; Ieșire
: Datele nu corespund restricțiilor impuse.
: Datele nu corespund restricțiilor impuse.
: 5 4
: 6 7


== Rezolvare ==  
== Rezolvare ==  

Revision as of 07:15, 3 May 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 va fișa pe ecran numărul S, reprezentând suma calculată, 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 1

Intrare
8
12 10 15 6 7 10 19 14
Ieșire
Datele sunt introduse correct.
5 4

Exemplu 2

Intrare
2
1 2 3 4 5 6
Ieșire
Datele nu corespund restricțiilor impuse.
6 7

Rezolvare

Rezolvare ver. 1

<syntaxhighlight lang="python" line>

  1. 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 validate_input primește numărul de elemente n și vectorul v și verifică dacă acestea respectă restricțiile impuse. Dacă se găsește o problemă, se va afișa un mesaj de eroare și se va returna False. Altfel, se va returna True.

Funcția suma_elemente_impare primește numărul de elemente n și vectorul v și calculează suma elementelor dintre primul și ultimul element impar din vector.

Funcția read_input primește datele de intrare și le validează folosind funcția validate_input. Dacă datele sunt valide, acestea vor fi returnate într-un tuplu.

În final, în blocul if __name__ == '__main__', se va apela funcția read_input pentru a citi datele de intrare, apoi funcția suma_elemente_impare pentru a calcula suma și se va afișa rezultatul pe ecran.