2421 - CalculSume: Difference between revisions

From Bitnami MediaWiki
Mraa (talk | contribs)
Pagină nouă: ==Cerința== Cu n numere naturale, a1,a2,…,an , se pot calcula următoarele sume: S1=a1+a2+…+an S2=a1⋅a2+a1⋅a3+…+an−1⋅an S3=a1⋅a2⋅a3+a1⋅a2⋅a4+…+an−2⋅an−1⋅an ... Sn=a1⋅a2⋅…⋅an . Se dau două numere n și k și apoi n numere naturale a1,a2,…,an . Se cere să se calculeze suma Sk . ==Date de intrare== Fișierul de intrare calculsume.in conține pe prima linie două numere n și k separate printr-un spațiu, urmate, pe a doua linie...
 
Mraa (talk | contribs)
 
(One intermediate revision by the same user not shown)
Line 61: Line 61:
S 3 =1*2*3, deci suma S3 este 6.
S 3 =1*2*3, deci suma S3 este 6.
==Rezolvare==
==Rezolvare==
<syntaxhighlight lang="python3" line="1">
MOD = 9973
MOD = 9973


def calculeaza_suma_k(n, k, numere):
def calculeaza_suma_k(n, k, numere):
    sume = [0] * (k + 1)


    for i in range(1, n + 1):
  sume = [0] * (k + 1)
        for j in range(k, 0, -1):
  for i in range(1, n + 1):
            sume[j] = (sume[j] + numere[i - 1] * sume[j - 1]) % MOD
      for j in range(k, 0, -1):
   
          sume[j] = (sume[j] + numere[i - 1] * sume[j - 1]) % MOD
    return sume[k]
 
  return sume[k]


if __name__ == "__main__":
if __name__ == "__main__":
    with open("calculsume.in", "r") as f:
        n, k = map(int, f.readline().split())
        numere = list(map(int, f.readline().split()))


    rezultat = calculeaza_suma_k(n, k, numere)
  with open("calculsume.in", "r") as f:
 
      n, k = map(int, f.readline().split())
    with open("calculsume.out", "w") as g:
      numere = list(map(int, f.readline().split()))
        g.write(str(rezultat) + "\n")
  rezultat = calculeaza_suma_k(n, k, numere)
python calculsume.py
  with open("calculsume.out", "w") as g:
      g.write(str(rezultat) + "\n")
</syntaxhighlight>

Latest revision as of 18:25, 11 January 2024

Cerința[edit | edit source]

Cu n numere naturale, a1,a2,…,an , se pot calcula următoarele sume: S1=a1+a2+…+an

S2=a1⋅a2+a1⋅a3+…+an−1⋅an

S3=a1⋅a2⋅a3+a1⋅a2⋅a4+…+an−2⋅an−1⋅an

... Sn=a1⋅a2⋅…⋅an .

Se dau două numere n

și k
și apoi n numere naturale a1,a2,…,an

. Se cere să se calculeze suma Sk .

Date de intrare[edit | edit source]

Fișierul de intrare calculsume.in conține pe prima linie două numere n și k separate printr-un spațiu, urmate, pe a doua linie de n numere naturale separate de asemenea, prin spații.

Date de ieșire[edit | edit source]

Fișierul de ieșire calculsume.out va conține rezultatul cerut.

Restricții și precizări[edit | edit source]

1 ≤ k ≤ n ≤ 100 numerele de pe a doua linie a fișierului de intrare vor fi mai mici decât 101 pentru că sumele cerute pot avea valori foarte mari, se cere să se afișeze restul împărțirii acestora la 9973 Exemplul 1: calculsume.in

3 1 1 2 3 calculsume.out

6 Exemplul 2: calculsume.in

3 2 1 2 3 calculsume.out

11 Exemplul 3: calculsume.in

3 3 1 2 3 calculsume.out

6

Explicație[edit | edit source]

Cele 3 exemple citesc câte un set de date de intrare, pentru fiecare se va afișa rezultatul cerut.

S 1 = 1 + 2 + 3, deci suma S1 este 6

S 2 =1*2+1*3+2*3, deci suma S2 este 11

S 3 =1*2*3, deci suma S3 este 6.

Rezolvare[edit | edit source]

<syntaxhighlight lang="python3" line="1"> MOD = 9973

def calculeaza_suma_k(n, k, numere):

  sume = [0] * (k + 1)
  for i in range(1, n + 1):
      for j in range(k, 0, -1):
          sume[j] = (sume[j] + numere[i - 1] * sume[j - 1]) % MOD
  
  return sume[k]

if __name__ == "__main__":

  with open("calculsume.in", "r") as f:
      n, k = map(int, f.readline().split())
      numere = list(map(int, f.readline().split()))
  rezultat = calculeaza_suma_k(n, k, numere)
  with open("calculsume.out", "w") as g:
      g.write(str(rezultat) + "\n")

</syntaxhighlight>