0359 - Gard: Difference between revisions

From Bitnami MediaWiki
Sinn Erich (talk | contribs)
Sinn Erich (talk | contribs)
Line 32: Line 32:
== Rezolvare ==  
== Rezolvare ==  
<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line>
#4273
#0359
def patrate_perfecte(n):
def calculate_needed_blocks(heights):
     patrate = []
     max_height = max(heights)
    i = 1
    return sum(max_height - h for h in heights)
    while len(patrate) < n:
        patrat = i * i
        patrate.append(patrat)
        i += 1
    return patrate


def read_heights(n):
    heights = list(map(int, input().split()))
    if len(heights) != n:
        raise ValueError("Input must contain exactly {} heights".format(n))
    for h in heights:
        if h < 0 or h > 100:
            raise ValueError("Height must be between 0 and 100")
    return heights


def calculeaza(numbers):
if __name__ == '__main__':
     product = 1
     n = int(input("Introdu numarul de stalpi: "))
     for number in numbers:
     if n < 1 or n > 1000:
         product *= number
         raise ValueError("Number of posts must be between 1 and 1000")
     return product
    heights = read_heights(n)
    needed_blocks = calculate_needed_blocks(heights)
     print(needed_blocks)


</syntaxhighlight>


def validare_numar(n):
'''Explicatie cod:'''
    if n < 1 or n > 10:
        return False
    return True
 


if __name__ == '__main__':
Această implementare citește înălțimile n stalpilor de gard, verifică dacă acestea sunt între 0 și 100 și apoi calculează numărul de blocuri necesare pentru a crește înălțimea fiecărui stalp până la înălțimea maximă a gardului. Funcția calculate_needed_blocks găsește înălțimea maximă și calculează diferența dintre aceasta și înălțimea fiecărui stalp. Funcția read_heights citeste înălțimile stalpilor, verifică numărul de intrări și dacă înălțimea fiecărui stalp se încadrează în intervalul specificat. In structura if __name__ == '__main__': se citeste n, se valideaza si se apeleaza functiile pentru a afisa numarul de blocuri necesare.
    n = int(input("Introduceți numărul n: "))
    if not validare_numar(n):
        print("Datele introduse nu corespund cerintelor.")
    else:
        squares = patrate_perfecte(n)
        product = calculeaza(squares)
        print("Datele introduse corespund cerintelor.")
        print(product)
 
 
</syntaxhighlight>

Revision as of 22:48, 2 April 2023

Sursa: [1]

Cerinţa

Parcul orașului este înconjurat cu un gard format din n stâlpi formați din blocuri de piatră suprapuse. La început, toți stâlpii aveau aceeași înălțime, dar în timp s-au deteriorat, pierzându-se de la unii stâlpi unele blocuri de piatră.

Primarul orașului dorește să renoveze gardul. Pentru aceasta, s-a determinat înălțimea curentă a fiecărui stâlp și se vor completa cu blocuri de piatră noi stâlpii deteriorați, astfel încât toți stâlpii să aibă aceeași înălțime.

Determinați numărul de blocuri de piatră necesare pentru renovarea gardului.

Date de intrare

Programul citește de la tastatură numărul de stâlpi n, iar apoi n numere naturale, separate prin spaţii, reprezentând înălțimea curentă a fiecărui stâlp.

Date de ieșire

Programul afișează pe ecran numărul T, reprezentând numărul de blocuri de piatră noi necesare pentru renovarea gardului.

Dacă datele sunt introduse corect, programul va rula.

În cazul în care datele nu respectă restricțiile, se va afișa pe ecran: "Datele nu corespund restricțiilor impuse.".

Restricţii şi precizări

1 ≤ n ≤ 1000

fiecare stâlp va avea înălțimea între 0 și 100

Exemplul 1

Intrare
5
7 5 6 8 2
Ieșire
12


Rezolvare

<syntaxhighlight lang="python" line>

  1. 0359

def calculate_needed_blocks(heights):

   max_height = max(heights)
   return sum(max_height - h for h in heights)

def read_heights(n):

   heights = list(map(int, input().split()))
   if len(heights) != n:
       raise ValueError("Input must contain exactly {} heights".format(n))
   for h in heights:
       if h < 0 or h > 100:
           raise ValueError("Height must be between 0 and 100")
   return heights

if __name__ == '__main__':

   n = int(input("Introdu numarul de stalpi: "))
   if n < 1 or n > 1000:
       raise ValueError("Number of posts must be between 1 and 1000")
   heights = read_heights(n)
   needed_blocks = calculate_needed_blocks(heights)
   print(needed_blocks)

</syntaxhighlight>

Explicatie cod:

Această implementare citește înălțimile n stalpilor de gard, verifică dacă acestea sunt între 0 și 100 și apoi calculează numărul de blocuri necesare pentru a crește înălțimea fiecărui stalp până la înălțimea maximă a gardului. Funcția calculate_needed_blocks găsește înălțimea maximă și calculează diferența dintre aceasta și înălțimea fiecărui stalp. Funcția read_heights citeste înălțimile stalpilor, verifică numărul de intrări și dacă înălțimea fiecărui stalp se încadrează în intervalul specificat. In structura if __name__ == '__main__': se citeste n, se valideaza si se apeleaza functiile pentru a afisa numarul de blocuri necesare.