3383 - Cif Max Min1: Difference between revisions
Dragos1234 (talk | contribs) |
Dragos1234 (talk | contribs) |
||
Line 26: | Line 26: | ||
: 2496 | : 2496 | ||
; Ieșire | ; Ieșire | ||
: ''cifmaxmin.out'' | |||
: 92 3 19 2 | : 92 3 19 2 | ||
<br> | <br> |
Revision as of 12:49, 9 April 2023
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
Fișierul de ieșire cifmaxmin.out va conține patru numere naturale, separate între ele printr-un spațiu, î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ț.
Restricţii şi precizări
- 1 ⩽ n ⩽ 1000
- Numerele scrise pe cartonașe sunt formate din cel puțin două cifre și cel mult nouă cifre
- Toate numerele de pe cartonașe au cifrele diferite de 0
- Cartonașele sunt alese în ordinea în care au fost așezate înainte de începerea jocului
- Există cel puțin un număr par și cel puțin un număr impar între numerele de pe cartonașe
Exemplul 1
- Intrare
- cifmaxmin.in
- 5
- 1839
- 47536
- 28
- 2459
- 2496
- Ieșire
- cifmaxmin.out
- 92 3 19 2
Exemplul 2
- Intrare
- cifmaxmin.in
- 5
- 1839
- 475362163921593912698
- 28
- 2459
- 2496
- Ieșire
- cifmaxmin.out
- Datele introduse nu corespund cerintelor.
Rezolvare
<syntaxhighlight lang="python" line>
- 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()
</syntaxhighlight>