1002 - Paginare: Difference between revisions
No edit summary |
No edit summary |
||
Line 46: | Line 46: | ||
result = 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, | if result < 10: #dacă nr de pagini este mai mic decat 10, atunci nr de pagini este 9 | ||
pages = result | pages = result | ||
else: | else: | ||
pages = 9 | pages = 9 | ||
result -= 9 | result -= 9 | ||
if result < 181: | 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: | if result % 2 == 0: | ||
pages += result // 2 | pages += result // 2 | ||
Line 58: | Line 59: | ||
print("IMPOSIBIL") | print("IMPOSIBIL") | ||
return | return | ||
#dacă nr total de pagini nu este divizibil cu 3, nu se pot numerota paginile | |||
else: | else: | ||
pages = 99 | pages = 99 | ||
Line 66: | Line 68: | ||
print("IMPOSIBIL") | print("IMPOSIBIL") | ||
return | return | ||
#afișăm nr total de volume din serie | |||
print(temp, end=' ') | print(temp, end=' ') | ||
if n % VOLUME == 0: | 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) | print(300) | ||
else: | else: |
Revision as of 08:05, 12 April 2023
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>