3076 - Circular: Difference between revisions

From Bitnami MediaWiki
Am creat de la zero.
 
mNo edit summary
 
(3 intermediate revisions by the same user not shown)
Line 1: Line 1:
sursa: [https://www.pbinfo.ro/probleme/3076/circular]
== Cerinţa ==
== Cerinţa ==
Scrieți un program care citește un număr natural și care să calculeze suma  a tuturor numerelor obținute prin permutări circulare la dreapta ale cifrelor lui n cu o poziție.
Scrieți un program care citește un număr natural și care să calculeze suma  a tuturor numerelor obținute prin permutări circulare la dreapta ale cifrelor lui n cu o poziție.
Line 19: Line 20:


== Explicație ==
== Explicație ==
; S-au citit n=123. Suma calculată este S=666 (=312+231+123).
S-au citit n=123. Suma calculată este S=666 (=312+231+123).


== Rezolvare ==
== Rezolvare ==
=== Rezolvare ver.1 ===


<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line>
numar_natural = input("Introduceti un numar natural: ")
 
def calculeaza_suma_permutari_circulare(numar):
    suma = 0
 
    # Validare date de intrare
    if numar < 1 or numar > 2000000000:
        print("Datele introduse nu sunt valide. Introduceti un numar natural pozitiv mai mic sau egal cu 2000000000.")
    else:
        for i in range(len(str(numar))):
            # Extragem ultima cifră
            ultima_cifra = numar % 10
            # "Rotim" numarul prin adaugarea ultimei cifre la inceput si eliminarea acesteia de la final
            numar = (numar // 10) + (ultima_cifra * (10 ** (len(str(numar)) - 1)))
            # Adunăm numărul la suma totală
            suma += numar
        print("Datele introduse sunt valide.")
        # Afisăm suma
        print("Suma numerelor obținute prin permutări circulare la dreapta ale cifrelor lui", str(numar), "este", suma)
 
 
if __name__ == "__main__":
    numar = int(input("Introduceti un numar natural: "))
    calculeaza_suma_permutari_circulare(numar)
 
</syntaxhighlight>
 
=== Rezolvare ver.2 ===
 
<syntaxhighlight lang="python" line>
 
numar_natural = int(input("Introduceti un numar natural: "))
suma = 0
suma = 0


# Validare date de intrare
# Validare date de intrare
if not numar_natural.isdigit() or int(numar_natural) < 1 or int(numar_natural) > 2000000000:
if numar_natural < 1 or numar_natural > 2000000000:
     print("Datele introduse nu sunt valide. Introduceti un numar natural pozitiv mai mic sau egal cu 2000000000.")
     print("Datele introduse nu sunt valide. Introduceti un numar natural pozitiv mai mic sau egal cu 2000000000.")
else:
else:
     for i in range(len(numar_natural)):
     for i in range(len(str(numar_natural))):
         # Transformăm numărul într-o listă de caractere
         # Extragem ultima cifră
         cifre = list(numar_natural)
         ultima_cifra = numar_natural % 10
         # Extragem prima cifră și o adăugăm la sfârșitul listei
         # "Rotim" numarul prin adaugarea ultimei cifre la inceput si eliminarea acesteia de la final
         cifra = cifre.pop(0)
         numar_natural = (numar_natural // 10) + (ultima_cifra * (10 ** (len(str(numar_natural)) - 1)))
        cifre.append(cifra)
        # Transformăm lista înapoi într-un număr întreg
        numar_permutat = int(''.join(cifre))
         # Adunăm numărul la suma totală
         # Adunăm numărul la suma totală
         suma += numar_permutat
         suma += numar_natural
     print("Datele introduse sunt valide.")
     print("Datele introduse sunt valide.")
     # Afisăm suma
     # Afisăm suma
     print("Suma numerelor obținute prin permutări circulare la dreapta ale cifrelor lui", numar_natural, "este", suma)
     print("Suma numerelor obținute prin permutări circulare la dreapta ale cifrelor lui", str(numar_natural), "este", suma, ".")


</syntaxhighlight>
</syntaxhighlight>

Latest revision as of 23:08, 15 May 2023

sursa: [1]

Cerinţa[edit | edit source]

Scrieți un program care citește un număr natural și care să calculeze suma a tuturor numerelor obținute prin permutări circulare la dreapta ale cifrelor lui n cu o poziție.

Date de intrare[edit | edit source]

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

Date de ieşire[edit | edit source]

Programul va afișa pe ecran suma, cu semnificația din enunț.

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

  • 1 ≤ n ≤ 2.000.000.000

Exemplu[edit | edit source]

Intrare
123
Ieșire
Datele introduse sunt valide
666

Explicație[edit | edit source]

S-au citit n=123. Suma calculată este S=666 (=312+231+123).

Rezolvare[edit | edit source]

Rezolvare ver.1[edit | edit source]

<syntaxhighlight lang="python" line>

def calculeaza_suma_permutari_circulare(numar):

   suma = 0
   # Validare date de intrare
   if numar < 1 or numar > 2000000000:
       print("Datele introduse nu sunt valide. Introduceti un numar natural pozitiv mai mic sau egal cu 2000000000.")
   else:
       for i in range(len(str(numar))):
           # Extragem ultima cifră
           ultima_cifra = numar % 10
           # "Rotim" numarul prin adaugarea ultimei cifre la inceput si eliminarea acesteia de la final
           numar = (numar // 10) + (ultima_cifra * (10 ** (len(str(numar)) - 1)))
           # Adunăm numărul la suma totală
           suma += numar
       print("Datele introduse sunt valide.")
       # Afisăm suma
       print("Suma numerelor obținute prin permutări circulare la dreapta ale cifrelor lui", str(numar), "este", suma)


if __name__ == "__main__":

   numar = int(input("Introduceti un numar natural: "))
   calculeaza_suma_permutari_circulare(numar)

</syntaxhighlight>

Rezolvare ver.2[edit | edit source]

<syntaxhighlight lang="python" line>

numar_natural = int(input("Introduceti un numar natural: ")) suma = 0

  1. Validare date de intrare

if numar_natural < 1 or numar_natural > 2000000000:

   print("Datele introduse nu sunt valide. Introduceti un numar natural pozitiv mai mic sau egal cu 2000000000.")

else:

   for i in range(len(str(numar_natural))):
       # Extragem ultima cifră
       ultima_cifra = numar_natural % 10
       # "Rotim" numarul prin adaugarea ultimei cifre la inceput si eliminarea acesteia de la final
       numar_natural = (numar_natural // 10) + (ultima_cifra * (10 ** (len(str(numar_natural)) - 1)))
       # Adunăm numărul la suma totală
       suma += numar_natural
   print("Datele introduse sunt valide.")
   # Afisăm suma
   print("Suma numerelor obținute prin permutări circulare la dreapta ale cifrelor lui", str(numar_natural), "este", suma, ".")

</syntaxhighlight>