3076 - Circular: Diferență între versiuni

De la Universitas MediaWiki
mFără descriere a modificării
 
(Nu s-a afișat o versiune intermediară efectuată de același utilizator)
Linia 1: Linia 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.
Linia 19: Linia 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 ==
Linia 25: Linia 26:


<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line>
numar_natural = input("Introduceti un numar natural: ")
suma = 0


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


</syntaxhighlight>
</syntaxhighlight>
Linia 51: Linia 55:


<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line>
numar_natural = int(input("Introduceti un numar natural: "))
numar_natural = int(input("Introduceti un numar natural: "))
suma = 0
suma = 0
Linia 67: Linia 72:
     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", str(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>

Versiunea curentă din 15 mai 2023 23:08

sursa: [1]

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.

Date de intrare

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

Date de ieşire

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

Restricții și precizări

  • 1 ≤ n ≤ 2.000.000.000

Exemplu

Intrare
123
Ieșire
Datele introduse sunt valide
666

Explicație

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

Rezolvare

Rezolvare ver.1

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)

Rezolvare ver.2

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

# 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, ".")