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()