1730 - S Stabil

From Bitnami MediaWiki
Revision as of 21:18, 4 January 2024 by Corjuc Eunice (talk | contribs) (Pagină nouă: Numim număr sstabil orice număr natural care este format dintr-o singură cifră sau care are suma oricăror două cifre vecine strict mai mare decât nouă. Asupra oricărui număr care nu este sstabil se pot efectua operaţii de înlocuire a oricăror două cifre vecine care au suma strict mai mică decât zece cu o cifră egală cu suma lor. Operaţiile de înlocuire pot fi aplicate, în acelaşi condiţii, şi asupra numerelor rezultate după fiecare înlocuire, de c...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Numim număr sstabil orice număr natural care este format dintr-o singură cifră sau care are suma oricăror două cifre vecine strict mai mare decât nouă.

Asupra oricărui număr care nu este sstabil se pot efectua operaţii de înlocuire a oricăror două cifre vecine care au suma strict mai mică decât zece cu o cifră egală cu suma lor.

Operaţiile de înlocuire pot fi aplicate, în acelaşi condiţii, şi asupra numerelor rezultate după fiecare înlocuire, de câte ori este nevoie, până când se obţine un număr sstabil.

De exemplu, 291 este număr sstabil deoarece 2+9>9 şi 9+1>9, iar 183 nu este sstabil pentru că 1+8<10. Din numărul 2453, efectuând o singură înlocuire, putem obţine 653 sau 293 (număr sstabil) sau 248. Numărul 653, nefiind sstabil, permite o nouă operaţie de înlocuire, obţinând astfel numărul 68, care este sstabil. Analog, din numărul 248 se poate obţine numărul sstabil 68.

Cerința[edit | edit source]

Scrieţi un program care să determine cel mai mare număr natural sstabil care se poate obţine dintr-un număr natural dat, aplicând una sau mai multe operaţii de înlocuire de tipul menţionat.

Date de intrare[edit | edit source]

Fişierul de intrare input.txt conţine pe prima linie un număr natural n, reprezentând numărul de cifre al numărului dat, iar pe linia a doua, separate prin câte un spaţiu, cifrele acestui număr.

Date de ieșire[edit | edit source]

Fişierul de ieşire output.txt va conţine pe o linie numărul sstabil maxim obţinut.

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

  • 1 ≤ n ≤ 1000000

Exemplul 1[edit | edit source]

input.txt:

5

1 0 4 5 1

output.txt:

191

Explicație:

10451 → 1091 → 191.

Exemplul 2[edit | edit source]

input.txt:

5

5 2 8 3 2

output.txt:

785

Explicație:

52832 → 7832 → 785.

Exemplul 3[edit | edit source]

input.txt:

9999999999999

1 2 3 4 5

Output:

Constrangeri neindeplinite

Rezolvare[edit | edit source]

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

   if not(1<=n<=1000000):
       print("Constrangeri neindeplinite")
       exit()

with open("input.txt", "r") as input_file, open("output.txt", "w") as output_file:

   n = int(input_file.readline())
   ver(n)
   a = list(map(int, input_file.readline().split()))
   b = [0] * 1000005
   k = 0
   r = n
   while r > 0:
       j = r
       s = 0
       while j > 0 and s < 10:
           s += a[j - 1]
           j -= 1
       k += 1
       if s < 10:
           b[k] = s
           r = j
       else:
           if k == 1:
               p = r
               t = a[p - 1]
               while s - t >= 10:
                   p -= 1
                   t += a[p - 1]
               b[k] = t
               r = p - 1
           else:
               p = r
               t = a[p - 1]
               while s - t > 9 or t + b[k - 1] < 10:
                   p -= 1
                   t += a[p - 1]
               b[k] = t
               r = p - 1
   for i in range(k, 0, -1):
       print(b[i], end="", file=output_file)

</syntaxhighlight>