1949 - Tort LMA: Difference between revisions

From Bitnami MediaWiki
Pagină nouă: == Cerinţa == Un celebru rezolvitor de pe '''pbinfo''' împlinește venerabila vârstă de '''n''' ani. Ceilalți rezolvitori s-au gândit să îi facă o surpriză și să comande un tort special. Acesta are mai multe nivele, toate având forma pătrată, astfel: * primul nivel este format din '''n*n''' prăjituri fiecare având prețul de '''1''' leu și având scris numărul '''1''' în partea de sus. * al doilea nivel se suprapune peste primul exact la mijloc și este f...
 
No edit summary
 
(One intermediate revision by the same user not shown)
Line 16: Line 16:
== Restricții și precizări ==
== Restricții și precizări ==
* '''1 ≤ n ≤ 100'''
* '''1 ≤ n ≤ 100'''
== Exemplu ==
== Exemplul 1 ==
; Intrare
; Intrare
: 5
: 5
; Ieșire
; Ieșire
: Datele introduse corespund restricțiilor impuse.
: 3
: 3
: 11111
: 11111
Line 27: Line 28:
: 11111
: 11111
: 46
: 46
== Exemplul 2 ==
; Intrare
: n
; Ieșire
: Datele introduse nu corespund restricțiilor impuse.
== Explicație ==
== Explicație ==
Tortul are '''3''' nivele. Primul nivel este format din '''25''' de prăjituri (fiecare cu prețul de '''1''' leu și cifra '''1'''), al doilea din '''9''' prăjituri (fiecare cu prețul de '''2''' lei și cifra '''2'''), iar al treilea dintr-o singură prăjitură (cu prețul '''3''' lei și cifra '''3''').
Tortul are '''3''' nivele. Primul nivel este format din '''25''' de prăjituri (fiecare cu prețul de '''1''' leu și cifra '''1'''), al doilea din '''9''' prăjituri (fiecare cu prețul de '''2''' lei și cifra '''2'''), iar al treilea dintr-o singură prăjitură (cu prețul '''3''' lei și cifra '''3''').


Prăjiturile de pe primul nivel costă în total '''25''' lei, cele de pe al doilea '''18''' lei, iar cele de pe al treilea '''3''' lei.
Prăjiturile de pe primul nivel costă în total '''25''' lei, cele de pe al doilea '''18''' lei, iar cele de pe al treilea '''3''' lei.
== Rezolvare ==
<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line>
def tort_special(n):
# 1949 - Tort LMA
def verificare_restrictii(n1):
    # functia de verificare a datelor de intrare
    if 1 <= n1 <= 100:
        return True
    else:
        return False
 
 
def tort_special(n1):
     # a) Numărul de nivele pe care le are tortul special
     # a) Numărul de nivele pe care le are tortul special
     nivele = n // 2 + n % 2
     nivele = n1 // 2 + n1 % 2
     print(nivele)
     print(nivele)


     # b) Afișarea tortului
     # b) Afișarea tortului
     for i in range(n):
     for i in range(n1):
         for j in range(n):
         for j in range(n1):
             print(min(i, j, n - i - 1, n - j - 1) + 1, end='')
             print(min(i, j, n1 - i - 1, n1 - j - 1) + 1, end='')
         print()
         print()


     # c) Calcularea prețului tortului
     # c) Calcularea prețului tortului
     pret = sum((n - 2 * i) ** 2 * (i + 1) for i in range(nivele))
     pret = sum((n1 - 2 * i) ** 2 * (i + 1) for i in range(nivele))
     print(pret)
     print(pret)


# Testează funcția cu datele de intrare
 
tort_special(5)
if __name__ == "__main__":
    try:
        # Citim datele de intrare
        n = int(input())
        if verificare_restrictii(n):            # verificam datele de intrare
            print("Datele de intrare corespund restrictiilor impuse.")
            # Calculam numarul de divizori
            tort_special(n)
        else:
            print("Datele de intrare nu corespund restrictiilor impuse.")
    # ne asteptam la 2 tipuri de erori din cauza datelor de intrare, le tratam corespunzator
    except ValueError:
        print("Datele de intrare nu corespund restrictiilor impuse.")
    except IndexError:
        print("Datele de intrare nu corespund restrictiilor impuse.")


</syntaxhighlight>
</syntaxhighlight>

Latest revision as of 17:36, 10 November 2023

Cerinţa[edit | edit source]

Un celebru rezolvitor de pe pbinfo împlinește venerabila vârstă de n ani. Ceilalți rezolvitori s-au gândit să îi facă o surpriză și să comande un tort special. Acesta are mai multe nivele, toate având forma pătrată, astfel:

  • primul nivel este format din n*n prăjituri fiecare având prețul de 1 leu și având scris numărul 1 în partea de sus.
  • al doilea nivel se suprapune peste primul exact la mijloc și este format din (n-2)*(n-2) prăjituri fiecare având prețul de 2 lei și având scris numărul 2 în partea de sus.
  • al treilea nivel se suprapune peste al doilea exact la mijloc și este format din (n-4)*(n-4) prăjituri fiecare având prețul de 3 lei și având numărul 3 în partea de sus.
  • ș.a.m.d.

a) Calculați și afișați numărul de nivele pe care le are tortul special. b) Afișați tortul, așa cum se vede dacă este privit de sus. c) Calculați și afișați prețul tortului.

Date de intrare[edit | edit source]

Programul citește de la tastatură numărul n reprezentând vârsta celebrului rezolvitor.

Date de ieşire[edit | edit source]

Programul va afișa pe ecran pe prima linie numărul de nivele pe care le are tortul special. Pe următoarele n linii va fi desenat tortul, iar pe următoarea linie va fi scris prețul tortului.

Restricții și precizări[edit | edit source]

  • 1 ≤ n ≤ 100

Exemplul 1[edit | edit source]

Intrare
5
Ieșire
Datele introduse corespund restricțiilor impuse.
3
11111
12221
12321
12221
11111
46

Exemplul 2[edit | edit source]

Intrare
n
Ieșire
Datele introduse nu corespund restricțiilor impuse.

Explicație[edit | edit source]

Tortul are 3 nivele. Primul nivel este format din 25 de prăjituri (fiecare cu prețul de 1 leu și cifra 1), al doilea din 9 prăjituri (fiecare cu prețul de 2 lei și cifra 2), iar al treilea dintr-o singură prăjitură (cu prețul 3 lei și cifra 3).

Prăjiturile de pe primul nivel costă în total 25 lei, cele de pe al doilea 18 lei, iar cele de pe al treilea 3 lei.

Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line>

  1. 1949 - Tort LMA

def verificare_restrictii(n1):

   # functia de verificare a datelor de intrare
   if 1 <= n1 <= 100:
       return True
   else:
       return False


def tort_special(n1):

   # a) Numărul de nivele pe care le are tortul special
   nivele = n1 // 2 + n1 % 2
   print(nivele)
   # b) Afișarea tortului
   for i in range(n1):
       for j in range(n1):
           print(min(i, j, n1 - i - 1, n1 - j - 1) + 1, end=)
       print()
   # c) Calcularea prețului tortului
   pret = sum((n1 - 2 * i) ** 2 * (i + 1) for i in range(nivele))
   print(pret)


if __name__ == "__main__":

   try:
       # Citim datele de intrare
       n = int(input())
       if verificare_restrictii(n):             # verificam datele de intrare
           print("Datele de intrare corespund restrictiilor impuse.")
           # Calculam numarul de divizori
           tort_special(n)
       else:
           print("Datele de intrare nu corespund restrictiilor impuse.")
   # ne asteptam la 2 tipuri de erori din cauza datelor de intrare, le tratam corespunzator
   except ValueError:
       print("Datele de intrare nu corespund restrictiilor impuse.")
   except IndexError:
       print("Datele de intrare nu corespund restrictiilor impuse.")

</syntaxhighlight>