1002 - Paginare: Difference between revisions
No edit summary |
Vardai Erwin (talk | contribs) |
||
(2 intermediate revisions by 2 users not shown) | |||
Line 4: | Line 4: | ||
Programul citește de la tastatură numărul '''n'''. | Programul citește de la tastatură numărul '''n'''. | ||
== Date de ieșire == | == Date de ieșire == | ||
Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele de intrare corespund restricțiilor impuse." și programul va afișa pe ecran numerele '''V P''', separate prin exact un spaţiu, sau mesajul IMPOSIBIL. În caz contrar, se va afișa pe ecran: "Datele de intrare nu corespund restricțiilor impuse." | |||
== Restricții de precizări == | == Restricții de precizări == | ||
*1 ⩽ '''n''' ⩽ 1000000000 | *1 ⩽ '''n''' ⩽ 1000000000 | ||
Line 15: | Line 16: | ||
; Ieșire | ; Ieșire | ||
: Datele introduse corespund restricțiilor impuse. | : Datele introduse corespund restricțiilor impuse. | ||
: 2 | : 2 105 | ||
=== Exemplul 2 === | === Exemplul 2 === | ||
; Intrare | ; Intrare | ||
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: |
Latest revision as of 18:32, 22 April 2023
Cerință[edit | edit source]
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[edit | edit source]
Programul citește de la tastatură numărul n.
Date de ieșire[edit | edit source]
Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele de intrare corespund restricțiilor impuse." și programul va afișa pe ecran numerele V P, separate prin exact un spaţiu, sau mesajul IMPOSIBIL. În caz contrar, se va afișa pe ecran: "Datele de intrare nu corespund restricțiilor impuse."
Restricții de precizări[edit | edit source]
- 1 ⩽ n ⩽ 1000000000
- numărătoarea paginilor începe de la 1
Exemplu[edit | edit source]
Exemplul 1[edit | edit source]
- Intrare
- 999
- Ieșire
- Datele introduse corespund restricțiilor impuse.
- 2 105
Exemplul 2[edit | edit source]
- Intrare
- 900
- Ieșire
- Datele introduse corespund restricțiilor impuse.
- IMPOSIBIL
Rezolvare[edit | edit source]
Rezolvarea ver. 1[edit | edit source]
<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>