1002 - Paginare: Difference between revisions

From Bitnami MediaWiki
No edit summary
 
(6 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 ==
Programul va afișa pe ecran numerele '''V P''', separate prin exact un spaţiu, sau mesajul IMPOSIBIL.
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'''  ⩽ 100000
*1 ⩽ '''n'''  ⩽ 1000000000
*numărătoarea paginilor începe de la 1
*numărătoarea paginilor începe de la 1
== Exemplul 1==
 
== Exemplu ==
=== Exemplul 1===
; Intrare
; Intrare
: 999
: 999
; Ieșire
; Ieșire
: Datele introduse corespund restricțiilor impuse.
: Datele introduse corespund restricțiilor impuse.
: 2
: 2 105
: 105
=== Exemplul 2 ===
== Exemplul 2 ==
; Intrare
; Intrare
: 900
: 900
Line 22: Line 24:
: IMPOSIBIL
: IMPOSIBIL


== Rezolvarea ver. 1 ==
== Rezolvare ==
=== Rezolvarea ver. 1 ===
<syntaxhighlight lang="python" line="1" start="1">
<syntaxhighlight lang="python" line="1" start="1">
def validare(n):
VOLUME = 792
     return n.isdigit() and 1 <= int(n) <= 100000
 
def validate_input(n):
     if not n.isdigit():
        return False
    n = int(n)
    return n > 0 and n <= 1_000_000_000


def paginare(n):
    max_pagini = 10**n - 1


     if max_pagini < 300:
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")
         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:
     else:
         V = max_pagini // 300
         temp = n // VOLUME
        P = max_pagini % 300
    if P == 0:
        P = 300


     print("Numarul de volume este:", V)
     result = n % VOLUME
     print("Numarul de pagini ale ultimului volum este:", P)
#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__':
if __name__ == '__main__':
 
     n = input("Introduceti numarul de cifre: ")
     n = int(input("Introduceti numarul de cifre: "))
    if validate_input(n):
 
        n = int(n)
if validare(n):
        print("Datele introduse corespund restricțiilor impuse.")
    n = int(n)
        paginate(n)
    print("Datele introduse corespund restricțiilor impuse.")
    else:
    paginare(n)
        print("Datele introduse nu corespund restricțiilor impuse.")
else:
    print("Datele introduse nu corespund restricțiilor impuse.")
 
</syntaxhighlight>
</syntaxhighlight>

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 
  1. 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
  1. 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
  1. 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
  1. 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>