1923 - Cifre egale

From Bitnami MediaWiki
Revision as of 18:22, 15 November 2023 by Hotico Iulia Denisa (talk | contribs) (→‎Exemplul 1)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Cerinţa[edit | edit source]

Afişaţi, în ordine crescătoare, toate numerele dintr-un anumit interval care au toate cifrele egale. Sunt două tipuri de cerinţe:

  • 1. se dau a şi b si se cer toate numerele din intervalul a, b (inclusiv, eventual, capetele).
  • 2. Se da x si se cer toate numerele cu maxim x cifre.

Date de intrare[edit | edit source]

Din fişierul egalein.txt se citeşte mai întâi un număr T. Dacă T este 1 pe a doua linie sunt două numere a şi b, separate prin spaţiu. Dacă T este 2, pe a doua linie va fi numărul x.

Date de ieşire[edit | edit source]

In fişierul egaleout.txt se scriu, pe un rând numerele cerute separate prin câte un spaţiu.

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

  • 1 ⩽ a ⩽ b ⩽ 10 17
  • 1 ⩽ x ⩽ 100
  • Pentru 20% din punctaj avem T = 1 şi 1 ⩽ a, b ⩽ 10 4
  • Pentru încă 20% din punctaj avem T = 1 şi 10 8 ⩽ a, b ⩽ 10 9
  • Pentru încă 10% din punctaj avem T = 1 şi a, b > 10 9
  • Pentru 50% din punctaj avem T=2

Exemplul 1[edit | edit source]

egalein.txt
1
8 30
egaleout.txt
Datele de intrare corespund restrictiilor impuse
8 9 11 22

Exemplul 2[edit | edit source]

egalein.txt
2
2
egaleout.txt
Datele de intrare corespund restrictiilor impuse
1 2 3 4 5 6 7 8 9 11 22 33 44 55 66 77 88 99

Exemplul 3[edit | edit source]

egalein.txt
-19999
5 9 0
egaleout.txt
Datele de intrare nu corespund restrictiilor impuse


Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line>

  1. 1923 Cifre egale

def validare(t_validare, a_validare, b_validare, x_validare):

   # Verificăm dacă t este în intervalul 1-2
   if t_validare < 1 or t_validare > 2:
       raise ValueError  # Ridicăm o eroare dacă t nu este în intervalul 1-2
   # Dacă t este 1, verificăm dacă a și b sunt în intervalul 1-10^17
   if t_validare == 1:
       if a_validare < 1 or b_validare > 10**17:
           raise ValueError  # Ridicăm o eroare dacă a sau b nu sunt în intervalul 1-10^17
   else:
       # Dacă t nu este 1, verificăm dacă x este în intervalul 1-100
       if x_validare < 1 or x_validare > 100:
           raise ValueError  # Ridicăm o eroare dacă x nu este în intervalul 1-100
   file_out.write("Datele de intrare corespund restrictiilor impuse\n")


def numere_egale(t_egale, a_egale, b_egale, x_egale):

   rezultate_egale = []    # Inițializăm o listă goală pentru a stoca rezultatele
   # Dacă t este 1, setăm start și end la a și b + 1, respectiv
   if t_egale == 1:
       start = a_egale
       end = b_egale + 1
   else:
       start = 1   # Dacă t nu este 1, setăm start la 1 și end la 10 la puterea x
       end = 10 ** x_egale
   for i in range(start, end):    # Parcurgem fiecare număr în intervalul de la start la end
       if len(set(str(i))) == 1:
           rezultate_egale.append(i)
   return rezultate_egale    # Returnăm lista de rezultate


if __name__ == '__main__':

   file_in = open("egalein.txt", "r")    # Deschidem fișierul de intrare pentru citire
   file_out = open("egaleout.txt", "w")    # Deschidem fișierul de ieșire pentru scriere
   try:
       T_main = int(file_in.readline())    # Citim tipul de cerință
       if T_main == 1:
           # Citim capetele intervalului
           a_main, b_main = map(int, file_in.readline().split())
           x_main = None
       else:
           x_main = int(file_in.readline())    # Citim numărul maxim de cifre
           a_main = b_main = None
       validare(T_main, a_main, b_main, x_main)    # Validăm datele de intrare
       # Calculăm și scriem numerele cu toate cifrele egale
       rezultate_main = numere_egale(T_main, a_main, b_main, x_main)
       file_out.write(' '.join(map(str, rezultate_main)) + '\n')
   except ValueError:
       file_out.write("Datele de intrare nu corespund restrictiilor impuse")
   except IndexError:
       file_out.write("Datele de intrare nu corespund restrictiilor impuse")

</syntaxhighlight>