3272 - Sum Div Ogl: Difference between revisions

From Bitnami MediaWiki
Pagină nouă: == Cerinţa == Se dau '''n''' numere naturale. Determinați suma divizorilor oglinditelor celor '''n''' numere. == Date de intrare == Programul citește de la tastatură numărul '''n''', iar apoi '''n''' numere naturale, separate prin spații. == Date de ieşire == Programul va afișa pe ecran numărul '''suma''', reprezentând suma cerută. == Restricții și precizări == * numar ∈ Ν * 0 ⩽ n ⩽ 1.000 * 0 ⩽ numar ⩽ 1.000.000.000 == Exemplu == ; Intrar...
 
No edit summary
 
(2 intermediate revisions by 2 users not shown)
Line 14: Line 14:
: 12 23 30
: 12 23 30
; Ieșire
; Ieșire
: Datele introduse corespund restricțiilor impuse.
: Datele de intrare corespund restricțiilor impuse.
: 99
: 99
== Explicație ==  
== Explicație ==  
Line 75: Line 75:


</syntaxhighlight>
</syntaxhighlight>
== Explicație ==
Acest program calculează suma divizorilor oglinditelor a n numere date de la tastatură. Mai întâi, programul verifică dacă numărul de numere introduse este valid, folosind funcția validare_date_numere. Dacă da, utilizatorul este rugat să introducă cele n numere, iar acestea sunt stocate într-o listă. Pentru fiecare număr din listă, se calculează oglinditul folosind funcția oglindit și apoi se calculează suma divizorilor oglinditelor acestui număr, folosind funcția suma_divizori_oglindite. Suma totală a divizorilor oglinditelor este calculată prin adăugarea sumei divizorilor oglinditelor pentru fiecare număr din listă și este afișată la sfârșit. Funcțiile validare_date_numar și validare_date verifică dacă numerele sunt valide și respectă anumite restricții.

Latest revision as of 10:06, 25 April 2023

Cerinţa[edit]

Se dau n numere naturale. Determinați suma divizorilor oglinditelor celor n numere.

Date de intrare[edit]

Programul citește de la tastatură numărul n, iar apoi n numere naturale, separate prin spații.

Date de ieşire[edit]

Programul va afișa pe ecran numărul suma, reprezentând suma cerută.

Restricții și precizări[edit]

  • numar ∈ Ν
  • 0 ⩽ n ⩽ 1.000
  • 0 ⩽ numar ⩽ 1.000.000.000

Exemplu[edit]

Intrare
3
12 23 30
Ieșire
Datele de intrare corespund restricțiilor impuse.
99

Explicație[edit]

Oglinditul lui 12 este 21; suma divizorilor săi este 32. Oglinditul lui 23 este 32; suma divizorilor săi este 63. Oglinditul lui 30 este 3; suma divizorilor săi este 4.

Rezolvare[edit]

<syntaxhighlight lang="python" line> def validare_date_numar(numar):

   flag = False
   if numar.isdigit():
       if 0 <= int(numar) <= 1_000_000_000:
           flag = True
   return flag


def validare_date_numere(n):

   flag = False
   if 0 <= int(n) <= 1000:
       flag = True
   return flag


def oglindit(numar):

   return int(str(numar)[::-1])


def suma_divizori(numar):

   suma = 0
   for i in range(1, numar//2 + 1):
       if numar % i == 0:
           suma += i
   suma += numar  # adăugăm și numărul în sumă, deoarece este divizor al lui numar
   return suma


def suma_divizori_oglindite(lista_numere):

   suma_totala = 0
   for numar in lista_numere:
       oglinditul = oglindit(numar)
       suma_divizori_oglindit = suma_divizori(oglinditul)
       suma_totala += suma_divizori_oglindit
   return suma_totala


if __name__ == '__main__':

   n = int(input())
   if validare_date_numere(n):
       print("\nDatele de intrare corespund restricțiilor impuse.\n")
       lista_numere = []
       for i in range(n):
           while True:
               numar = input(f"Introduceți numărul {i + 1}: ")
               if validare_date_numar(numar):
                   lista_numere.append(int(numar))
                   break
               else:
                   print("Numărul introdus nu corespunde restricțiilor impuse.")
       print(f"\nSuma divizorilor oglinditelor este: {suma_divizori_oglindite(lista_numere)}")
   else:
       print("Datele de intrare nu corespund restricțiilor impuse.")

</syntaxhighlight>

Explicație[edit]

Acest program calculează suma divizorilor oglinditelor a n numere date de la tastatură. Mai întâi, programul verifică dacă numărul de numere introduse este valid, folosind funcția validare_date_numere. Dacă da, utilizatorul este rugat să introducă cele n numere, iar acestea sunt stocate într-o listă. Pentru fiecare număr din listă, se calculează oglinditul folosind funcția oglindit și apoi se calculează suma divizorilor oglinditelor acestui număr, folosind funcția suma_divizori_oglindite. Suma totală a divizorilor oglinditelor este calculată prin adăugarea sumei divizorilor oglinditelor pentru fiecare număr din listă și este afișată la sfârșit. Funcțiile validare_date_numar și validare_date verifică dacă numerele sunt valide și respectă anumite restricții.