2694 - Min Max2
Cerință
Se dau 2 numere naturale cu exact 3 cifre fiecare, să se afișeze cel mai mare și cel mai mic număr de două cifre scris cu o cifră din primul număr și cu o cifră din al doilea.
Date de intrare
Programul citește de la tastatură 2 numere separate prin spații.
Date de ieșire
Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele de intrare corespund restricțiilor impuse." și programul afișează pe ecran cel mai mare și cel mai mic număr de două cifre scris cu o cifră din primul număr și cu o cifră din al doilea în această ordine, separate prin spații.În caz contrar, se va afișa pe ecran: "Datele de intrare nu corespund restricțiilor impuse."
Restricții și precizări
- 100 ≤ a ≤ b ≤ 999
Exemplul 1
- Intrare
- 123 912
- Ieșire
- Datele de intrare corespund restricțiilor impuse.
- 93 11
Rezolvare
Rezolvare ver. 1
<syntaxhighlight lang="python" line="1" start="1"> def validare(a, b):
if 100 <= a <= b <= 999: return True return False
def maxi(n):
ma = 0 while n: if n % 10 > ma: ma = n % 10 n //= 10 return ma
def minim_maxim2(a, b):
max1 = maxi(a) max2 = maxi(b) if max1 > max2: ma = max1 * 10 + max2 else: ma = max2 * 10 + max1
v = [0] * 4 v1 = [0] * 4 p = p1 = 0 result = str(ma) + ' ' while a: v[p] = a % 10 p += 1 a //= 10 while b: v1[p1] = b % 10 p1 += 1 b //= 10 v = sorted(v[:p]) v1 = sorted(v1[:p1]) min1, min2 = v[0], v1[0] if v1[0] == 0 and v[0] == 0: mi = 10 for i in range(p): if v[i] < mi and v[i] != 0: mi = v[i] if v1[i] < mi and v1[i] != 0: mi = v1[i] m = mi * 10 result += str(m) else: if min1 == 0 or min2 == 0: if min1 > min2: result += str(min1 * 10) else: result += str(min2 * 10) else: if min1 < min2: result += str(min1 * 10 + min2) else: result += str(min2 * 10 + min1) return result
if __name__ == "__main__":
a, b = map(int, input().split())
if validare(a, b): print("Datele de intrare corespund restricțiilor impuse.") result = minim_maxim2(a, b) print(result) else: print("Datele de intrare nu corespund restricțiilor impuse.")
</syntaxhighlight>
Explicatie
Acest cod este o implementare a unei funcții care primește două numere întregi a și b și determină o valoare maximă și o valoare minimă într-un anumit mod.
Funcția validare(a, b) verifică dacă valorile introduse pentru a și b sunt între 100 și 999, inclusiv, și returnează True dacă da, altfel returnează False.
Funcția maxi(n) primește un număr întreg n și determină cifra maximă din numărul respectiv. Se face acest lucru prin iterarea prin cifrele numărului (obținute prin împărțirea repetată la 10) și compararea fiecărei cifre cu valoarea maximă curentă.
Funcția minim_maxim2(a, b) calculează valoarea maximă și valoarea minimă într-un anumit mod. Mai întâi se calculează valoarea maximă (denumită ma) prin combinarea cifrei maxime din fiecare dintre cele două numere într-un singur număr. Apoi, se descompun numerele a și b în cifre și se ordonează cifrele crescător. Cifrele sunt stocate în listele v și v1. Valoarea minimă este apoi determinată ca fiind prima cifră din aceste liste. Dacă una dintre aceste cifre este 0, se caută cea mai mică cifră nenulă în cele două liste și se combină pentru a forma valoarea minimă. În cele din urmă, valoarea minimă și valoarea maximă sunt combinate pentru a forma valoarea finală.
În secțiunea if __name__ == "__main__": se primește intrarea de la utilizator pentru valorile a și b. Dacă valorile introduse sunt valide, se afișează un mesaj corespunzător și se apelează funcția minim_maxim2(a, b) pentru a determina valorile minime și maxime. Altfel, se afișează un mesaj de eroare.