0516 - SumSec1: Difference between revisions

From Bitnami MediaWiki
Flaviu (talk | contribs)
Pagină nouă: 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 == Programul va fișa pe ecran numărul S, reprezentând suma calculată. == Restricţii şi precizări == * 1 ≤ n...
 
Flaviu (talk | contribs)
No edit summary
Line 19: Line 19:


== Rezolvare ==  
== Rezolvare ==  
def validate_input(n, v):
    if n < 1 or n > 1000:
        print("n nu respecta restricțiile 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("valorile din v nu respecta restricțiile 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():
    n = int(input())
    v = list(map(int, input().split()))
    if not validate_input(n, v):
        exit()
    return n, v
if __name__ == '__main__':
    n, v = read_input()
    print(suma_elemente_impare(n, v))
=== Rezolvare ver. 1 ===
=== Rezolvare ver. 1 ===
<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line>
Line 44: Line 79:
print(sum)
print(sum)
</syntaxhighlight>
</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.

Revision as of 19:40, 17 April 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

Programul va fișa pe ecran numărul S, reprezentând suma calculată.

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

Intrare
8
12 10 15 6 7 10 19 14
Ieșire
5 4

Rezolvare

def validate_input(n, v):

   if n < 1 or n > 1000:
       print("n nu respecta restricțiile 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("valorile din v nu respecta restricțiile 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():

   n = int(input())
   v = list(map(int, input().split()))
   if not validate_input(n, v):
       exit()
   return n, v

if __name__ == '__main__':

   n, v = read_input()
   print(suma_elemente_impare(n, v))

Rezolvare ver. 1

<syntaxhighlight lang="python" line>

  1. 0516 - SumSec1

n = int(input("Introduceți numărul de elemente din vector: ")) v = list(map(int, input("Introduceți elementele vectorului: ").split()))

  1. Căutăm primul și ultimul element impar din vector

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
  1. Calculăm suma elementelor din secvența dată

sum = 0 if first_odd != -1 and last_odd != -1:

   for i in range(first_odd, last_odd + 1):
       sum += v[i]
  1. Afisăm suma

print(sum) </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.