4298 - Lacom

From Bitnami MediaWiki

Context[edit | edit source]

Victor și tatăl său au mers la magazinul de bomboane pentru ca tatăl să își onoreze o mai veche promisiune. Magazinul are bomboanele aranjate pe un rând, în mai multe cutii așezate una lângă alta. Se cunoaște numărul de bomboane din fiecare cutie, în ordinea în care sunt așezate cutiile începând de la intrare. Tatăl i-a fixat lui Victor următoarea regulă de colectare a bomboanelor:

  • Parcurge cutiile începând de la intrare.
  • Colectează toate bomboanele din prima cutie.
  • Când ajunge la o cutie de pe rând, colectează toate bomboanele de acolo doar dacă numărul lor este strict mai mare decât numărul de bomboane din ultima cutie din care a colectat.

Cerinţa[edit | edit source]

Determinați câte bomboane a colectat Victor.

Date de intrare[edit | edit source]

Din fișierul lacom.in se citește mai întâi numărul de cutii, număr_cutii și apoi numărul de bomboane din fiecare cutie, în vectorul continut_cutii, în ordinea întâlnirii cutiilor pornind de la intrare.

Date de ieșire[edit | edit source]

Pe ecran se va afișa mesajul: "Datele de intrare corespund restricțiilor impuse.", iar în fișierul lacom.out se scrie numărul determinat. În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, programul va afișa "Datele de intrare nu corespund restricțiilor impuse.".

Restricţii şi precizări[edit | edit source]

  • numar_cutii ∈ ℕ
  • 1 ⩽ numar_cutii ⩽ 100
  • element continut_cutii ∈ ℕ
  • 1 ⩽ element continut_cutii < 1.000.000.000

Exemplu[edit | edit source]

Intrare (lacom.in)
7
5
3
9
7
8
10
1
Ieșire (Ecran)
Datele introduse corespund restricțiilor impuse.
Ieșire (lacom.out)
24


Intrare (lacom.in)
3
5
abc
63.5
Ieșire (Ecran)
Datele introduse nu corespund restricțiilor impuse.
Ieșire (lacom.out)


Intrare (lacom.in)
0
Ieșire (Ecran)
Datele introduse nu corespund restricțiilor impuse.
Ieșire (lacom.out)


Rezolvare[edit | edit source]

Rezolvare ver. 1[edit | edit source]

<syntaxhighlight lang="python" line>

  1. 4298 - Lacom

def validare_date_numar_cutii(numar):

   if numar.isdigit():
       if 1 <= int(numar) <= 100:
           return True
       else:
           return False
   else:
       return False
   
   

def validare_date_continut_cutii(vector):

   return all(isinstance(element, (int)) and element >= 0 for element in vector)


def lacom(numar_cutii, continut_cutii):

   maxim_curent = continut_cutii[0]
   raspuns = maxim_curent
   
   for element in continut_cutii[1:]:
       if element > maxim_curent:
           maxim_curent = element
           raspuns += maxim_curent
           
   fisier_iesire.write(str(raspuns))
   
   

if __name__ == "__main__":

   fisier_intrare = open("lacom.in", "r")
   fisier_iesire = open("lacom.out", "w")
   
   linie1 = fisier_intrare.readline()
   numar_cutii = linie1[0]
   
   continut_cutii = []
   linie2 = fisier_intrare.readline().strip().split(" ")
   continut_cutii.extend([int(element) for element in linie2])
   
   if validare_date_numar_cutii and validare_date_continut_cutii(continut_cutii):
       numar_cutii = int(numar_cutii)
       print(numar_cutii, continut_cutii)
       print('Datele de intrare corespund restricțiilor impuse.')
       lacom(numar_cutii, continut_cutii)
   else:
       print("Datele de intrare nu corespund restricțiilor impuse.")
       

</syntaxhighlight>