3383 - Cif Max Min1

De la Universitas MediaWiki

Sursa: [1]

Cerinţa

Scrieți un program care determină și afișează patru numere, în această ordine: numărul obținut de Petrică, câte cartonașe a extras Petrică, numărul obținut de Ionuț și câte cartonașe a extras Ionuț.

Date de intrare

Fișierul de intrare cifmaxmin.in in conține pe prima linie un număr n, reprezentând numărul de cartonașe din joc. Pe a doua linie din fișier se află cele n numere naturale scrise pe cartonașe, separate între ele printr-un spațiu.

Date de ieșire

Programul va afișa pe ecran, mesajul "Datele introduse corespund cerințelor" și pe o linie nouă programul va afișa pe ecran o succesiune de k semne + sau - care să îndeplinească relația. În caz contrar programul va afișa pe o linie noua mesajul "Datele introduse nu corespund cerintelor."

Restricţii şi precizări

  • 1 ⩽ n ⩽ 100

Exemplul 1

Intrare
3
Ieșire
-+--+


Exemplul 2

Intrare
2
Ieșire
---+


Rezolvare

#3383
def calc_min_max(x):
    cmin = 10
    cmax = 0
    while x:
        if x % 10 > cmax:
            cmax = x % 10
        if x % 10 < cmin:
            cmin = x % 10
        x //= 10
    return cmin, cmax


def validate_input(n, nums):
    if not (1 < n <= 1000):
        return False
    for num in nums:
        if not (10 <= num <= 999999999) or '0' in str(num) or len(set(str(num))) != len(str(num)):
            return False
    if all(num % 2 == 0 for num in nums) or all(num % 2 == 1 for num in nums):
        return False
    return True


def main():
    with open("cifmaxmin.in") as fin, open("cifmaxmin.out", "w") as fout:
        n = int(fin.readline().strip())
        nums = []
        for i in range(n):
            x = int(fin.readline().strip())
            nums.append(x)
        if not validate_input(n, nums):
            fout.write("Datele introduse nu corespund cerintelor.")
            return
        print("Datele introduse corespund cerintelor.")
        maxi = 1
        mini = 100
        c1 = c2 = 0
        for num in nums:
            if num % 2 == 0:
                c1 += 1
                cmin, cmax = calc_min_max(num)
                nr = cmax * 10 + cmin
                if nr > maxi:
                    maxi = nr
            else:
                c2 += 1
                cmin, cmax = calc_min_max(num)
                nr = cmin * 10 + cmax
                if nr < mini:
                    mini = nr
        fout.write(f"{maxi} {c1} {mini} {c2}")


main()

Explicatie rezolvare