1141 - Ech

De la Universitas MediaWiki

Cerința

Numim număr echilibrat un număr natural pentru care suma cifrelor de pe poziţii pare este egală cu suma cifrelor de pe poziţii impare.

De exemplu numărul 13552 este echilibrat, pentru că 1+5+2=8=3+5.

Dat fiind un număr natural N să se determine cel mai mic număr echilibrat, strict mai mare decât N.

Date de intrare

Fișierul de intrare ech.in conține pe prima linie numărul N.

Date de ieșire

Pe ecran se va afișa mesajul: "Datele de intrare corespund restricțiilor impuse."

Pe următoarea linie se va afișa cel mai mic număr echilibrat, strict mai mare decât N.

Î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."

Restricții și precizări

  • Numărul N are cel mult 23 de cifre.

Exemplu 1

Intrare
99
Ieșire
Datele de intrare corespund restricțiilor impuse.
110

Explicație

1+0=1.

Exemplu 2

Intrare
123133
Ieșire
Datele de intrare corespund restricțiilor impuse.
123134

Explicație

1+3+3=2+1+4.

Exemplu 3

Intrare
123456789098765432101234567890987654321012345678909876543210
Ieșire
Datele de intrare nu corespund restricțiilor impuse.

Rezolvare

#1141 Ech
def conditii(n):
    return len(str(n)) <= 23


def is_echilibrat(n):
    # Ținem cont de sumele cifrelor de pe poziții impare și pare
    suma_impara = 0
    suma_para = 0
    for i in range(len(str(n))):
        # Dacă indicele este par (indicele 0, 2, 4...),
        # adunăm la suma cifrelor impare (indicele 0 înseamnă poziția 1, indicele 2 = poziția 3 etc.)
        if i % 2 == 0:
            suma_impara += int(str(n)[i])
        # Dacă indicele este impar (indicele 1, 3, 5...),
        # adunăm la suma cifrelor pare (indicele 1 înseamnă poziția 2, indicele 3 = poziția 4 etc.)
        else:
            suma_para += int(str(n)[i])

    return suma_impara == suma_para


def ech(n):
    # Pornim de la n+1 deoarece rezultatul trebuie să fie strict mai mare decât n
    n += 1

    # Atâta timp cât numărul nu este echilibrat, îl incrementăm
    while not is_echilibrat(n):
        n += 1

    # La ieșirea din while, n este un număr echilibrat
    print(n)


if __name__ == "__main__":
    n = int(input())
    if not conditii(n):
        print("Datele de intrare nu corespund restricțiilor impuse.")
    else:
        print("Datele de intrare corespund restricțiilor impuse.")
        ech(n)