1141 - Ech

From Bitnami MediaWiki

Cerința[edit | edit source]

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[edit | edit source]

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

Date de ieșire[edit | edit source]

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[edit | edit source]

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

Exemplu 1[edit | edit source]

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

Explicație[edit | edit source]

1+0=1.

Exemplu 2[edit | edit source]

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

Explicație[edit | edit source]

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

Exemplu 3[edit | edit source]

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

Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line="1">

  1. 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)

</syntaxhighlight>