4009 - Mos Craciun 1: Difference between revisions

From Bitnami MediaWiki
Andrada378 (talk | contribs)
Pagină nouă: Cerinta Moș Crăciun pregătește cadourile pentru acest an. El cunoaște prețurile a n cadouri și are la dispoziție o sumă de bani S. Ajutați-l să aleagă un număr maxim de cadouri a căror preț total să nu depășească S și determinați suma minimă de care mai are nevoie Moș Crăciun pentru a cumpăra încă un cadou. Date de intrare Programul citește de la tastatură numerele n S, iar apoi n numere naturale, reprezentând prețurile cadourilor. Date de...
 
Andrada378 (talk | contribs)
No edit summary
 
Line 1: Line 1:
Cerinta  
== Cerinta ==
 
Moș Crăciun pregătește cadourile pentru acest an. El cunoaște prețurile a n cadouri și are la dispoziție o sumă de bani S. Ajutați-l să aleagă un număr maxim de cadouri a căror preț total să nu depășească S și determinați suma minimă de care mai are nevoie Moș Crăciun pentru a cumpăra încă un cadou.
Moș Crăciun pregătește cadourile pentru acest an. El cunoaște prețurile a n cadouri și are la dispoziție o sumă de bani S. Ajutați-l să aleagă un număr maxim de cadouri a căror preț total să nu depășească S și determinați suma minimă de care mai are nevoie Moș Crăciun pentru a cumpăra încă un cadou.


Date de intrare
== Date de intrare ==
 
Programul citește de la tastatură numerele n S, iar apoi n numere naturale, reprezentând prețurile cadourilor.
Programul citește de la tastatură numerele n S, iar apoi n numere naturale, reprezentând prețurile cadourilor.


Date de iesire  
== Date de iesire ==
 
Programul va afișa pe ecran două numere, k p, separate printr-un spațiu, reprezentând numărul maxim de cadouri pe care le poate cumpăra Moș Crăciun și suma minimă de care mai are nevoie pentru a cumpăra încă un cadou.
Programul va afișa pe ecran două numere, k p, separate printr-un spațiu, reprezentând numărul maxim de cadouri pe care le poate cumpăra Moș Crăciun și suma minimă de care mai are nevoie pentru a cumpăra încă un cadou.


Rezolvare
== Restricții și precizări ==


def mos_craciun(n, S, preturi):
* 1 ≤ n ≤ 1000
* 1 ≤ S ≤ 1 000 000 000
* prețurile cadourilor vor fi mai mici decât 1 000 000


    preturi.sort()  # Sortăm prețurile cadourilor în ordine crescătoare
== Rezolvare ==
<syntaxhighlight lang="python">
def validate_input(n, S, preturi):
    if not (1 <= n <= 1000):
        raise ValueError("Numărul de cadouri trebuie să fie între 1 și 1000.")


    suma_cheltuita = 0
    if not (1 <= S <= 1000000000):
        raise ValueError("Suma disponibilă trebuie să fie între 1 și 1 000 000 000.")


    numar_cadouri = 0
    if not all(0 < pret < 1000000 for pret in preturi):
        raise ValueError("Prețurile cadourilor trebuie să fie mai mici decât 1 000 000.")


    for pret in preturi:
def mos_craciun(n, S, preturi):
    preturi.sort()  # Sortăm prețurile cadourilor în ordine crescătoare
    suma_cheltuita = 0
    numar_cadouri = 0
    for pret in preturi:
        if suma_cheltuita + pret <= S:  # Dacă putem cumpăra acest cadou
            suma_cheltuita += pret
            numar_cadouri += 1
        else:
            break
    suma_necesara = max(0, pret - (S - suma_cheltuita))  # Calculăm suma minimă necesară pentru următorul cadou
    return numar_cadouri, suma_necesara


        if suma_cheltuita + pret <= S:  # Dacă putem cumpăra acest cadou
def mos_craciun(n, S, preturi):
 
    preturi.sort()  # Sortăm prețurile cadourilor în ordine crescătoare
            suma_cheltuita += pret
    suma_cheltuita = 0
 
    numar_cadouri = 0
            numar_cadouri += 1
    for pret in preturi:
 
        if suma_cheltuita + pret <= S: # Dacă putem cumpăra acest cadou
        else:
            suma_cheltuita += pret
 
            numar_cadouri += 1
            break
        else:
 
            break
    suma_necesara = max(0, pret - (S - suma_cheltuita))  # Calculăm suma minimă necesară pentru următorul cadou
    suma_necesara = max(0, pret - (S - suma_cheltuita)) # Calculăm suma minimă necesară pentru următorul cadou
 
    return numar_cadouri, suma_necesara
    return numar_cadouri, suma_necesara


def main():
def main():
 
    n, S = map(int, input("Introduceți numărul de cadouri și suma de bani disponibilă (S): ").split())
    n, S = map(int, input("Introduceți numărul de cadouri și suma de bani disponibilă (S): ").split())
    preturi = list(map(int, input("Introduceți prețurile cadourilor: ").split()))
 
    k, p = mos_craciun(n, S, preturi)
    preturi = list(map(int, input("Introduceți prețurile cadourilor: ").split()))
    print(f"Numărul maxim de cadouri: {k}")
 
    print(f"Suma minimă necesară pentru încă un cadou: {p}")
    k, p = mos_craciun(n, S, preturi)
 
    print(f"Numărul maxim de cadouri: {k}")
 
    print(f"Suma minimă necesară pentru încă un cadou: {p}")


if __name__ == "__main__":
if __name__ == "__main__":
 
    main()
    main()
</syntaxhighlight>

Latest revision as of 16:04, 4 January 2024

Cerinta[edit | edit source]

Moș Crăciun pregătește cadourile pentru acest an. El cunoaște prețurile a n cadouri și are la dispoziție o sumă de bani S. Ajutați-l să aleagă un număr maxim de cadouri a căror preț total să nu depășească S și determinați suma minimă de care mai are nevoie Moș Crăciun pentru a cumpăra încă un cadou.

Date de intrare[edit | edit source]

Programul citește de la tastatură numerele n S, iar apoi n numere naturale, reprezentând prețurile cadourilor.

Date de iesire[edit | edit source]

Programul va afișa pe ecran două numere, k p, separate printr-un spațiu, reprezentând numărul maxim de cadouri pe care le poate cumpăra Moș Crăciun și suma minimă de care mai are nevoie pentru a cumpăra încă un cadou.

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

  • 1 ≤ n ≤ 1000
  • 1 ≤ S ≤ 1 000 000 000
  • prețurile cadourilor vor fi mai mici decât 1 000 000

Rezolvare[edit | edit source]

<syntaxhighlight lang="python"> def validate_input(n, S, preturi):

   if not (1 <= n <= 1000):
       raise ValueError("Numărul de cadouri trebuie să fie între 1 și 1000.")
   if not (1 <= S <= 1000000000):
       raise ValueError("Suma disponibilă trebuie să fie între 1 și 1 000 000 000.")
   if not all(0 < pret < 1000000 for pret in preturi):
       raise ValueError("Prețurile cadourilor trebuie să fie mai mici decât 1 000 000.")

def mos_craciun(n, S, preturi):

   preturi.sort()  # Sortăm prețurile cadourilor în ordine crescătoare
   suma_cheltuita = 0
   numar_cadouri = 0
   for pret in preturi:
       if suma_cheltuita + pret <= S:  # Dacă putem cumpăra acest cadou
           suma_cheltuita += pret
           numar_cadouri += 1
       else:
           break
   suma_necesara = max(0, pret - (S - suma_cheltuita))  # Calculăm suma minimă necesară pentru următorul cadou
   return numar_cadouri, suma_necesara

def mos_craciun(n, S, preturi):

   preturi.sort()  # Sortăm prețurile cadourilor în ordine crescătoare
   suma_cheltuita = 0
   numar_cadouri = 0
   for pret in preturi:
       if suma_cheltuita + pret <= S:  # Dacă putem cumpăra acest cadou
           suma_cheltuita += pret
           numar_cadouri += 1
       else:
           break
   suma_necesara = max(0, pret - (S - suma_cheltuita))  # Calculăm suma minimă necesară pentru următorul cadou
   return numar_cadouri, suma_necesara

def main():

   n, S = map(int, input("Introduceți numărul de cadouri și suma de bani disponibilă (S): ").split())
   preturi = list(map(int, input("Introduceți prețurile cadourilor: ").split()))
   k, p = mos_craciun(n, S, preturi)
   print(f"Numărul maxim de cadouri: {k}")
   print(f"Suma minimă necesară pentru încă un cadou: {p}")

if __name__ == "__main__":

   main()

</syntaxhighlight>