1923 - Cifre egale: Difference between revisions
Pagină nouă: == Cerinţa == 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 == Din fişierul '''egale.in''' se citeşte mai întâi un număr '''T'''. Dacă '''T''' este '''1''' pe a doua linie sunt dou... |
|||
(6 intermediate revisions by 2 users not shown) | |||
Line 5: | Line 5: | ||
* 2. Se da x si se cer toate numerele cu maxim '''x''' cifre. | * 2. Se da x si se cer toate numerele cu maxim '''x''' cifre. | ||
== Date de intrare == | == Date de intrare == | ||
Din fişierul ''' | 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 == | == Date de ieşire == | ||
In fişierul ''' | 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 == | == Restricții și precizări == | ||
* 1 ⩽ a ⩽ b ⩽ 10<sup> 17 </sup> | * 1 ⩽ a ⩽ b ⩽ 10<sup> 17 </sup> | ||
Line 15: | Line 15: | ||
* Pentru încă '''10%''' din punctaj avem '''T = 1''' şi a, b > 10<sup> 9 </sup> | * Pentru încă '''10%''' din punctaj avem '''T = 1''' şi a, b > 10<sup> 9 </sup> | ||
* Pentru '''50%''' din punctaj avem '''T=2''' | * Pentru '''50%''' din punctaj avem '''T=2''' | ||
== | == Exemplul 1 == | ||
; | ; egalein.txt | ||
1 | |||
8 30 | |||
; | ; egaleout.txt | ||
: 8 9 11 22 | Datele de intrare corespund restrictiilor impuse | ||
8 9 11 22 | |||
:<br> | |||
== Exemplul 2 == | |||
; 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 | |||
:<br> | |||
== Exemplul 3 == | |||
; egalein.txt | |||
-19999 | |||
5 9 0 | |||
; egaleout.txt | |||
Datele de intrare nu corespund restrictiilor impuse | |||
<br> | <br> | ||
== Rezolvare == | == Rezolvare == | ||
<syntaxhighlight lang="python" line> | <syntaxhighlight lang="python" line> | ||
# | # 1923 Cifre egale | ||
def numere_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 | 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: | 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> | </syntaxhighlight> |
Latest revision as of 18:22, 15 November 2023
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>
- 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>