0819 - Generare 1

From Bitnami MediaWiki

Cerința[edit | edit source]

Se consideră următoarele operații, care se aplică numerelor naturale:

  • op 1 – se adaugă la număr cifra 4 – din 13 se obține 134
  • op 2 – se adaugă la număr cifra 0 – din 13 se obține 130
  • op 3 – dacă numărul este par, se împarte la 2 – din 20 se obține 10

Dându-se un număr natural n, să se determine un șir de operații dintre cele de mai sus prin care, pornind de la valoarea 4, se ajunge la n.

Date de intrare[edit | edit source]

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

Date de ieșire[edit | edit source]

Programul va afișa pe ecran un șir de valori din mulțimea {1,2,3}, astfel încât, aplicând în ordine operațiile corespunzătoare se ajunge de la valoarea 4 la valoarea n.

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

  • 1 ≤ n ≤ 100.000

Exemplul 1[edit | edit source]

Input:

5

Output:

3 3 2 3

Explicație:

Pornim de la 4. Se aplica op 3 și se obține 2; se aplică op 3 și se obține 1; se aplică op 2 și se obține 10; se aplică op 3 și se obține 5.

Exemplul 2[edit | edit source]

Input:

9999999999999

Output:

Constrangeri neindeplinite

Rezolvare[edit | edit source]

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

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

v = [0] * 10000 op = [0] * 10000 nv = 0

  1. 1 -> se adauga 4
  2. 2 -> se adauga 0
  3. 3 -> se imparte la 2, daca este par

n = int(input()) ver(n) gata = False nv += 1 v[nv] = n

while not gata:

   if n == 4:
       gata = True
   else:
       if n % 10 == 4:
           nv += 1
           op[nv] = 1
           n //= 10
       elif n % 10 == 0:
           nv += 1
           op[nv] = 2
           n //= 10
       else:
           nv += 1
           op[nv] = 3
           n *= 2
       v[nv] = n

for i in range(nv, 1, -1):

   print(op[i], end=" ")

</syntaxhighlight>