1002 - Paginare
Cerință
Pentru numerotarea paginilor unei serii enciclopedice formate din unul sau mai multe volume se presupune că se folosesc n cifre. Fiecare volum are 300 de pagini, eventual cu excepţia ultimului volum care ar putea avea mai puţine. Pentru n dat, să se determine numărul de volume din serie V şi numărul de pagini P ale ultimului volum. Dacă nu este posibilă numerotarea paginilor folosind n cifre, se va afişa mesajul IMPOSIBIL.
Date de intrare
Programul citește de la tastatură numărul n.
Date de ieșire
Programul va afișa pe ecran numerele V P, separate prin exact un spaţiu, sau mesajul IMPOSIBIL.
Restricții de precizări
- 1 ⩽ n ⩽ 1000000000
- numărătoarea paginilor începe de la 1
Exemplu
Exemplul 1
- Intrare
- 999
- Ieșire
- Datele introduse corespund restricțiilor impuse.
- 2
- 105
Exemplul 2
- Intrare
- 900
- Ieșire
- Datele introduse corespund restricțiilor impuse.
- IMPOSIBIL
Rezolvare
Rezolvarea ver. 1
<syntaxhighlight lang="python" line="1" start="1"> VOLUME = 792
def validate_input(n):
if not n.isdigit(): return False n = int(n) return n > 0 and n <= 1_000_000_000
def paginate(n): #verificăm numărul de pagini
if n < VOLUME: #dacă numărul introdusneste mai mic ca și VOLUME, se afișează IMPOSIBIL print("IMPOSIBIL") return if n % VOLUME != 0: #aflăm numărul de pagini din VOLUME temp = n // VOLUME + 1 #stocăm valoare nr de pagini else: temp = n // VOLUME
result = n % VOLUME
- calculăm nr de pagini din ultimul volum
if result < 10: #dacă nr de pagini este mai mic decat 10, atunci nr de pagini este 9 pages = result else: pages = 9 result -= 9 if result < 181: #dacă nr de pagini este mai mare ca și 181, atunci nr de pagini este formt din 3 numere
- dacă nr total de pagini nu este divizibil cu 2, nu se pot numerota paginile
if result % 2 == 0: pages += result // 2 else: print("IMPOSIBIL") return
- dacă nr total de pagini nu este divizibil cu 3, nu se pot numerota paginile
else: pages = 99 result -= 180 if result % 3 == 0: pages += result // 3 else: print("IMPOSIBIL") return
- afișăm nr total de volume din serie
print(temp, end=' ') if n % VOLUME == 0: #dacă există un nr întreg, atunci ultimul volum are 300 de pagini, altfel se va afișa nr de pagini print(300) else: print(pages)
if __name__ == '__main__':
n = input("Introduceti numarul de cifre: ") if validate_input(n): n = int(n) print("Datele introduse corespund restricțiilor impuse.") paginate(n) else: print("Datele introduse nu corespund restricțiilor impuse.")
</syntaxhighlight>