2750 - Gen Nr: Difference between revisions
No edit summary |
|||
Line 1: | Line 1: | ||
sursa: [https://www.pbinfo.ro/probleme/2750/gennr] | |||
== Cerinţa == | == Cerinţa == | ||
Se citesc 2 numere naturale, cu cel mult 12 cifre fiecare. Să se afișeze cel mai mic și cel mai mare număr având exact două cifre, format cu o cifră din primul număr și cu o cifră din al doilea. | Se citesc 2 numere naturale, cu cel mult 12 cifre fiecare. Să se afișeze cel mai mic și cel mai mare număr având exact două cifre, format cu o cifră din primul număr și cu o cifră din al doilea. | ||
Line 24: | Line 25: | ||
<syntaxhighlight lang="python" line> | <syntaxhighlight lang="python" line> | ||
def citeste_numar_valid(mesaj): | |||
while True: | |||
try: | |||
numar = int(input(mesaj)) | |||
if numar < 0 or numar > 999999999999: | |||
raise ValueError | |||
return numar | |||
except ValueError: | |||
print("Numărul introdus este invalid. Vă rugăm să introduceți un număr natural cu cel mult 12 cifre.") | |||
def gaseste_numere_minim_si_maxim(a, b): | |||
cifre_a = [int(cifra) for cifra in str(a)] | |||
cifre_b = [int(cifra) for cifra in str(b)] | |||
minim = None | |||
maxim = None | |||
# Iterăm prin cifrele ambelor numere și formăm numere cu două cifre | |||
for cifra_a in cifre_a: | |||
for cifra_b in cifre_b: | |||
if cifra_a != cifra_b: | |||
numar1 = cifra_a * 10 + cifra_b | |||
numar2 = cifra_b * 10 + cifra_a | |||
# Verificăm dacă numerele formate sunt cu două cifre | |||
if numar1 >= 10: | |||
# Actualizăm minimul și maximul | |||
if minim is None or numar1 < minim: | |||
minim = numar1 | |||
if maxim is None or numar1 > maxim: | |||
maxim = numar1 | |||
if numar2 >= 10: | |||
if minim is None or numar2 < minim: | |||
minim = numar2 | |||
if maxim is None or numar2 > maxim: | |||
maxim = numar2 | |||
return minim, maxim | |||
if __name__ == "__main__": | |||
a = citeste_numar_valid("Introduceți primul număr: ") | |||
b = citeste_numar_valid("Introduceți al doilea număr: ") | |||
minim_numar, maxim_numar = gaseste_numere_minim_si_maxim(a, b) | |||
if minim_numar is None or maxim_numar is None: | |||
print("Cel mai mic număr cu două cifre format din cifrele celor două numere este:", | print("Nu există cifre în comun între cele două numere sau nu există numere cu două cifre.") | ||
print("Cel mai mare număr cu două cifre format din cifrele celor două numere este:", | else: | ||
print("Cel mai mic număr cu două cifre distincte format din cifrele celor două numere este:", minim_numar) | |||
print("Cel mai mare număr cu două cifre distincte format din cifrele celor două numere este:", maxim_numar) | |||
</syntaxhighlight> | </syntaxhighlight> |
Latest revision as of 00:14, 16 May 2023
sursa: [1]
Cerinţa[edit | edit source]
Se citesc 2 numere naturale, cu cel mult 12 cifre fiecare. Să se afișeze cel mai mic și cel mai mare număr având exact două cifre, format cu o cifră din primul număr și cu o cifră din al doilea.
Date de intrare[edit | edit source]
Programul citește de la tastatură cele 2 numere separate printr-un spațiu.
Date de ieşire[edit | edit source]
Programul va afișa pe ecran cel mai mic și cel mai mare număr de exact două cifre format cu o cifră din primul număr și cu o cifră din al doilea, separate printr-un spațiu.
Restricții și precizări[edit | edit source]
- cele două numere citite vor fi mai mici decât 1.000.000.000.000
Exemplu[edit | edit source]
- Intrare
- 293 412
- Ieșire
- Datele introduse corespund restricțiilor impuse.
- 12 94
Explicație[edit | edit source]
Cifrele 1 și 2 sunt cele mai mici cifre din al doilea respectiv primul număr și astfel se formează 12, iar 9 și 4 sunt cele mai mari cifre din primul respectiv al doilea număr și astfel se formează 94
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line>
def citeste_numar_valid(mesaj):
while True: try: numar = int(input(mesaj)) if numar < 0 or numar > 999999999999: raise ValueError return numar except ValueError: print("Numărul introdus este invalid. Vă rugăm să introduceți un număr natural cu cel mult 12 cifre.")
def gaseste_numere_minim_si_maxim(a, b):
cifre_a = [int(cifra) for cifra in str(a)] cifre_b = [int(cifra) for cifra in str(b)] minim = None maxim = None
# Iterăm prin cifrele ambelor numere și formăm numere cu două cifre for cifra_a in cifre_a: for cifra_b in cifre_b: if cifra_a != cifra_b: numar1 = cifra_a * 10 + cifra_b numar2 = cifra_b * 10 + cifra_a
# Verificăm dacă numerele formate sunt cu două cifre if numar1 >= 10: # Actualizăm minimul și maximul if minim is None or numar1 < minim: minim = numar1 if maxim is None or numar1 > maxim: maxim = numar1
if numar2 >= 10: if minim is None or numar2 < minim: minim = numar2 if maxim is None or numar2 > maxim: maxim = numar2
return minim, maxim
if __name__ == "__main__":
a = citeste_numar_valid("Introduceți primul număr: ") b = citeste_numar_valid("Introduceți al doilea număr: ")
minim_numar, maxim_numar = gaseste_numere_minim_si_maxim(a, b)
if minim_numar is None or maxim_numar is None: print("Nu există cifre în comun între cele două numere sau nu există numere cu două cifre.") else: print("Cel mai mic număr cu două cifre distincte format din cifrele celor două numere este:", minim_numar) print("Cel mai mare număr cu două cifre distincte format din cifrele celor două numere este:", maxim_numar)
</syntaxhighlight>