3611 - Sumă Cif Perm: Difference between revisions

From Bitnami MediaWiki
Adrian (talk | contribs)
Pagină nouă: == Cerința == Se dă un număr natural '''num''' de exact trei cifre distincte. Să se calculeze suma tuturor numerelor care se pot obține prin interschimbarea cifrelor lui '''num'''. == Date de intrare == Programul citește de la tastatură numărul '''num'''. == Date de ieșire == Pe ecran se va afișa mesajul: "Datele de intrare corespund restricțiilor impuse". În următorul rând se va afișa pe ecran suma cerută. În cazul în care datele introduse de la tastatură...
 
Adrian (talk | contribs)
No edit summary
 
(One intermediate revision by the same user not shown)
Line 7: Line 7:
În următorul rând se va afișa pe ecran suma cerută.
În următorul rând se va afișa pe ecran suma cerută.


În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul "Datele de intrare nu corespund restricțiilor impuse".
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul "Nu au fost respectate cerintele impuse".
== Restricții și precizări ==
== Restricții și precizări ==
* 102 ⩽ '''num''' ⩽ 987
* 102 ⩽ '''num''' ⩽ 987
Line 27: Line 27:
<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line>
# 3611 - sumacifperm
# 3611 - sumacifperm
# Importam functia permutations din modulul itertools
from itertools import permutations
from itertools import permutations




def sumacifperm():
def validare(num):
     num = int(input())
     # Daca datele sunt invalide v-om face raise la eroarea ValueError


     # Functia "set()" va converti string-ul (generat din num in cazul nostru)
     # Functia "set()" va converti string-ul (generat din num in cazul nostru)
Line 49: Line 50:
     )
     )


     if all(conditii):
     if not all(conditii):
         print("Datele de intrare corespund restricțiilor impuse")
         raise ValueError


        suma = 0


        # Functia "permutations()" va genera toare permutatiile cifrelor
def sumacifperm(num):
        # lui num. Daca num = 123 atunci toate permutatiile posibile sunt:
    suma = 0
        # 123, 132, 213, 231, 312, 321
        for num_combinatie in permutations(str(num), 3):
            suma += int(''.join(num_combinatie))


         print(suma)
    # Functia "permutations()" va genera toare permutatiile cifrelor
    # lui num. Daca num = 123 atunci toate permutatiile posibile sunt:
    # 123, 132, 213, 231, 312, 321
    for num_combinatie in permutations(str(num), 3):
         suma += int(''.join(num_combinatie))


     else:
     print(suma)
        print("Nu au fost respectate cerintele impuse")




if __name__ == '__main__':
if __name__ == '__main__':
     sumacifperm()
     num = int(input())
 
    # Verificam daca datele introduse sunt valide
    # daca nu afisam mesajul corespunsador
    try:
        validare(num)
    except ValueError:
        print("Nu au fost respectate cerintele impuse")
    else:
        print("Datele de intrare corespund restricțiilor impuse")
 
        sumacifperm(num)


</syntaxhighlight>
</syntaxhighlight>

Latest revision as of 11:14, 23 May 2023

Cerința[edit | edit source]

Se dă un număr natural num de exact trei cifre distincte. Să se calculeze suma tuturor numerelor care se pot obține prin interschimbarea cifrelor lui num.

Date de intrare[edit | edit source]

Programul citește de la tastatură numărul num.

Date de ieșire[edit | edit source]

Pe ecran se va afișa mesajul: "Datele de intrare corespund restricțiilor impuse". În următorul rând se va afișa pe ecran suma cerută.

În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul "Nu au fost respectate cerintele impuse".

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

  • 102 ⩽ num ⩽ 987
  • num are cele trei cifre distincte

Exemplu 1[edit | edit source]

Intrare
123
Ieșire
Datele de intrare corespund restricțiilor impuse
1332


Exemplu 2[edit | edit source]

Intrare
122
Ieșire
Nu au fost respectate cerintele impuse


Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line>

  1. 3611 - sumacifperm
  2. Importam functia permutations din modulul itertools

from itertools import permutations


def validare(num):

   # Daca datele sunt invalide v-om face raise la eroarea ValueError
   # Functia "set()" va converti string-ul (generat din num in cazul nostru)
   # intr-un set. Acest set contine doar caractele unice gasite in num.
   # Deci daca:
   # num = 123, set(str(num)) = {3, 2, 1}
   # num = 122, set(str(num)) = {2, 1}
   # Mai multe informatii despre tipul de data set:
   # https://www.w3schools.com/python/python_sets.asp
   # Daca numarul de cifre din set nu este identic cu numarul de cifre din num
   # atunci inseamna ca cifrele din num nu sunt unice.
   conditii = (
       num >= 102, num <= 987,
       len(set(str(num))) == len(str(num)),
       len(str(num)) == 3
   )
   if not all(conditii):
       raise ValueError


def sumacifperm(num):

   suma = 0
   # Functia "permutations()" va genera toare permutatiile cifrelor
   # lui num. Daca num = 123 atunci toate permutatiile posibile sunt:
   # 123, 132, 213, 231, 312, 321
   for num_combinatie in permutations(str(num), 3):
       suma += int(.join(num_combinatie))
   print(suma)


if __name__ == '__main__':

   num = int(input())
   # Verificam daca datele introduse sunt valide
   # daca nu afisam mesajul corespunsador
   try:
       validare(num)
   except ValueError:
       print("Nu au fost respectate cerintele impuse")
   else:
       print("Datele de intrare corespund restricțiilor impuse")
       sumacifperm(num)

</syntaxhighlight>