2230 - paindrom3

From Bitnami MediaWiki

Gigel a învăţat la şcoală un nou cuvânt: palindrom. El ştie acum că un palindrom este o construcţie formată din litere sau/şi cifre care arată la fel citită de la început spre sfârşit sau citită de la sfârşit spre început. De exemplu numerele 2552 și 12321 au proprietatea de palindrom. Deoarece lui Gigel îi place să se joace cu cifrele, el îşi pune următoarea problemă: dat fiind un număr natural, pot fi rearanjate cifrele lui astfel încât să obţinem un palindrom? Dacă da, care este numărul maxim palindrom care poate fi obţinut?

Cerința[edit | edit source]

Fiind dat un număr natural n să se determine cel mai mare număr palindrom care se poate obţine cu cifrele numărului n.

Date de intrare[edit | edit source]

Fișierul de intrare input.txt conţine pe prima linie numărul natural n.

Date de ieșire[edit | edit source]

Fișierul de ieșire output.txt conţine pe prima linie cel mai mare număr palindrom care se poate obţine cu cifrele numărului n.

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

  • 0 < n < 2 147 483 648
  • Pentru datele de test există întotdeauna soluţie

Exemplul 1[edit | edit source]

input.txt:

3121321

output.txt:

3211123

Exemplul 2[edit | edit source]

input.txt:

999999999999999999999999999999

Output:

Input-ul nu convine conditiilor

Rezolvare[edit | edit source]

<syntaxhighlight lang="python3" line="1"> def verificare(n):

   if not(1<=n<=2147483648):
       print("Input-ul nu convine conditiilor")
       exit()

with open("input.txt") as f:

   n = int(next(f))
   verificare(n)

f = [0] * 10 while n:

   f[n % 10] += 1
   n //= 10

k = -1 for i in range(10):

   if f[i] % 2:
       f[i] -= 1
       k = i

with open("output.txt", "w") as fout:

   for i in range(9, -1, -1):
       if f[i]:
           print(str(i) * (f[i] // 2), end="", file=fout)
   if k >= 0:
       print(k, end="", file=fout)
   for i in range(10):
       if f[i]:
           print(str(i) * (f[i] // 2), end="", file=fout)

</syntaxhighlight>