1002 - Paginare

De la Universitas MediaWiki

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

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

  • 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

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.")