3484 - 3 La N: Difference between revisions

From Bitnami MediaWiki
No edit summary
No edit summary
 
(2 intermediate revisions by the same user not shown)
Line 2: Line 2:


== Cerinţa ==
== Cerinţa ==
Se dau '''numar''' numere naturale distincte. Pentru oricare două numere date, distincte, '''numar1''' şi '''numar2''', se determină ultima cifră a numărului <math>3^{3^{3^{numar1*numar2}}}</math> şi se însumează cifrele obţinute. Aflaţi valoarea acestei sume.
Se dau '''n''' numere naturale distincte. Pentru oricare două numere date, distincte, '''numar1''' şi '''numar2''', se determină ultima cifră a numărului <math>3^{3^{3^{numar1*numar2}}}</math> şi se însumează cifrele obţinute. Aflaţi valoarea acestei sume.
==Date de intrare==
==Date de intrare==
Fișierul de intrare '''3lan.in''' conține pe prima linie numărul '''numar''', iar pe a doua linie cele '''numar''' numere date, despărţite prin spaţii.
Fișierul de intrare '''3lan.in''' conține pe prima linie numărul '''n''', iar pe a doua linie cele '''n''' numere date, despărţite prin spaţii.
==Date de ieşire==
==Date de ieşire==  
Fișierul de ieșire '''3lan.out''' va conține pe prima linie suma cerută.
Dacă datele sunt introduse corect, pe ecran se va afișa '''"Datele sunt introduse corect."''', apoi fișierul de ieșire '''3lan.out''' va conține pe prima linie suma cerută. în caz contrar, se va afișa pe ecran. '''"Datele nu au fost introduse corect."'''
==Restricții și precizări==
==Restricții și precizări==
* ''' 2 &les; numar &les; 1.000'''
* ''' 2 &les; numar &les; 1.000'''
* cele '''numar''' numere date sunt cel mult egale cu '''10.000'''
* cele '''n''' numere date sunt cel mult egale cu '''10.000'''


== Exemplu ==
== Exemplu ==
Line 22: Line 22:
<syntaxhighlight lang="python" line="">
<syntaxhighlight lang="python" line="">


numar = int(input())
with open('3lan.in', 'r') as fin:
a = list(map(int, input().split()))
# Citirea primului numar din fisierul de intrare si conversia acestuia la intreg folosind functia int
numar = int(fin.readline().strip())
# Citirea si conversia elementelor din a doua linie a fisierului de intrare la intregi, stocandu-le intr-o lista
a = list(map(int, fin.readline().split()))
s = 0
s = 0


def treilan(x, y):
def treilan(x, y):
    rest = (x * y) % 4
# Calcularea restului impartirii dintre produsul lui 'x' si 'y' la 4 si stocarea rezultatului in variabila 'rest'
    if rest == 0:
    rest = (x * y) % 4
        nr1 = 1
# Determinarea valorii lui 'nr1' in functie de restul anterior calculat
    elif rest == 1:
    if rest == 0:
        nr1 = 3
        nr1 = 1
    elif rest == 2:
    elif rest == 1:
        nr1 = 9
        nr1 = 3
    else:
    elif rest == 2:
        nr1 = 7
        nr1 = 9
    nr1 %= 4
    else:
    if nr1 == 0:
      nr1 = 7
        nr2 = 1
# Calcularea restului impartirii lui 'nr1' la 4 si actualizarea valorii lui 'nr1'
    elif nr1 == 1:
    nr1 %= 4
        nr2 = 3
# Determinarea valorii lui 'nr2' in functie de 'nr1'
    elif nr1 == 2:
    if nr1 == 0:
        nr2 = 9
        nr2 = 1
    else:
    elif nr1 == 1:
        nr2 = 3
    elif nr1 == 2:
        nr2 = 9
    else:
         nr2 = 7
         nr2 = 7
    nr2 %= 4
# Calcularea restului impartirii lui 'nr2' la 4 si returnarea acestuia
    if nr2 == 0:
    nr2 %= 4
        return 1
    if nr2 == 0:
    elif nr2 == 1:
        return 1
        return 3
    elif nr2 == 1:
    elif nr2 == 2:
        return 3
        return 9
    elif nr2 == 2:
    else:
        return 9
        return 7
    else:
          return 7


for i in range(1, numar+1):
#Parcurgem toate perechile de numere din intervalul [1, numar]
    for j in range(i+1, numar+1):
  for i in range(1, numar+1):
        s += treilan(i, j)
    for j in range(i+1, numar+1): # Apelarea functiei 'treilan' cu parametrii 'i' si 'j' si adaugarea rezultatului la variabila 's'.
 
      s += treilan(i, j)
print(s)




    with open('3lan.out', 'w') as fout:
# Verificarea daca valorile din fisierul de intrare respecta conditiile
        if numar >= 2 and numar <= 1000 and all(aj <= 10000 for aj in a):
# Scrierea valorii variabilei 's' in fisierul de iesire
          print(s, file=fout)
        else:
# Scrierea unui mesaj de eroare in fisierul de iesire in cazul in care datele din fisierul de intrare nu sunt valide
            print("Datele nu au fost introduse corect.", file=fout)
            print("Datele nu au fost introduse corect.")
</syntaxhighlight>
</syntaxhighlight>

Latest revision as of 17:42, 26 April 2023

Sursă: [1]

Cerinţa[edit | edit source]

Se dau n numere naturale distincte. Pentru oricare două numere date, distincte, numar1 şi numar2, se determină ultima cifră a numărului şi se însumează cifrele obţinute. Aflaţi valoarea acestei sume.

Date de intrare[edit | edit source]

Fișierul de intrare 3lan.in conține pe prima linie numărul n, iar pe a doua linie cele n numere date, despărţite prin spaţii.

Date de ieşire[edit | edit source]

Dacă datele sunt introduse corect, pe ecran se va afișa "Datele sunt introduse corect.", apoi fișierul de ieșire 3lan.out va conține pe prima linie suma cerută. în caz contrar, se va afișa pe ecran. "Datele nu au fost introduse corect."

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

  • 2 ⩽ numar ⩽ 1.000
  • cele n numere date sunt cel mult egale cu 10.000

Exemplu[edit | edit source]

3lan.in
2
9 0
3lan.out
7

Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line="">

with open('3lan.in', 'r') as fin:

  1. Citirea primului numar din fisierul de intrare si conversia acestuia la intreg folosind functia int

numar = int(fin.readline().strip())

  1. Citirea si conversia elementelor din a doua linie a fisierului de intrare la intregi, stocandu-le intr-o lista

a = list(map(int, fin.readline().split())) s = 0

def treilan(x, y):

  1. Calcularea restului impartirii dintre produsul lui 'x' si 'y' la 4 si stocarea rezultatului in variabila 'rest'
    rest = (x * y) % 4
  1. Determinarea valorii lui 'nr1' in functie de restul anterior calculat
    if rest == 0:
        nr1 = 1
    elif rest == 1:
        nr1 = 3
    elif rest == 2:
        nr1 = 9
    else:
      nr1 = 7
  1. Calcularea restului impartirii lui 'nr1' la 4 si actualizarea valorii lui 'nr1'
    nr1 %= 4
  1. Determinarea valorii lui 'nr2' in functie de 'nr1'
    if nr1 == 0:
        nr2 = 1
    elif nr1 == 1:
        nr2 = 3
    elif nr1 == 2:
        nr2 = 9
    else:
       nr2 = 7
  1. Calcularea restului impartirii lui 'nr2' la 4 si returnarea acestuia
    nr2 %= 4
    if nr2 == 0:
        return 1
    elif nr2 == 1:
        return 3
    elif nr2 == 2:
        return 9
    else:
         return 7
  1. Parcurgem toate perechile de numere din intervalul [1, numar]
  for i in range(1, numar+1):
    for j in range(i+1, numar+1): # Apelarea functiei 'treilan' cu parametrii 'i' si 'j' si adaugarea rezultatului la variabila 's'.
     s += treilan(i, j)


    with open('3lan.out', 'w') as fout:
  1. Verificarea daca valorile din fisierul de intrare respecta conditiile
       if numar >= 2 and numar <= 1000 and all(aj <= 10000 for aj in a):
  1. Scrierea valorii variabilei 's' in fisierul de iesire
          print(s, file=fout)
       else:
  1. Scrierea unui mesaj de eroare in fisierul de iesire in cazul in care datele din fisierul de intrare nu sunt valide
           print("Datele nu au fost introduse corect.", file=fout)
           print("Datele nu au fost introduse corect.")

</syntaxhighlight>