2694 - Min Max2

De la Universitas MediaWiki

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 ≤ ab ≤ 999

Exemplul 1

Intrare
123 912
Ieșire
Datele de intrare corespund restricțiilor impuse.
93 11

Rezolvare

Rezolvare ver. 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.")

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.