4010 - Mos Craciun 2: Difference between revisions
Andrada378 (talk | contribs) Pagină nouă: Cerinta Moș Crăciun pregătește cadourile pentru acest an. El trebuie să dea cadouri identice la n copii. Pentru aceasta, a vizitat m magazine (posibil online) și pentru fiecare magazin a aflat prețul cadoului în acel magazin și numărul de cadouri disponibile în acel magazin. Determinati suma minimă necesară pentru a cumpăra cele n cadouri necesare. Dacă nu se pot cumpăra cele n cadouri afișați mesajul imposibil. Date de intrare Programul citește de la t... |
Andrada378 (talk | contribs) |
||
(One intermediate revision by the same user not shown) | |||
Line 1: | Line 1: | ||
== Cerința == | |||
Moș Crăciun pregătește cadourile pentru acest an. El trebuie să dea cadouri identice la n copii. Pentru aceasta, a vizitat m magazine (posibil online) și pentru fiecare magazin a aflat prețul cadoului în acel magazin și numărul de cadouri disponibile în acel magazin. | Moș Crăciun pregătește cadourile pentru acest an. El trebuie să dea cadouri identice la n copii. Pentru aceasta, a vizitat m magazine (posibil online) și pentru fiecare magazin a aflat prețul cadoului în acel magazin și numărul de cadouri disponibile în acel magazin. | ||
Determinati suma minimă necesară pentru a cumpăra cele n cadouri necesare. Dacă nu se pot cumpăra cele n cadouri afișați mesajul imposibil. | Determinati suma minimă necesară pentru a cumpăra cele n cadouri necesare. Dacă nu se pot cumpăra cele n cadouri afișați mesajul imposibil. | ||
Date de intrare | == Date de intrare == | ||
Programul citește de la tastatură numerele n m, iar apoi m perechi numere naturale p c, reprezentând prețul și cantitatea de cadouri disponibile în cele n magazine. | Programul citește de la tastatură numerele n m, iar apoi m perechi numere naturale p c, reprezentând prețul și cantitatea de cadouri disponibile în cele n magazine. | ||
Date de iesire | == Date de iesire == | ||
Programul va afișa pe ecran suma totală necesară S sau mesajul imposibil. | Programul va afișa pe ecran suma totală necesară S sau mesajul imposibil. | ||
== Restricții și precizări == | |||
* 1 ≤ n ≤ 1000 | |||
* 1 ≤ m ≤ 100 | |||
* 0 ≤ c ≤ 100 | |||
* 1 ≤ p ≤ 100 | |||
=== Exemplu: === | |||
'''Intrare''' | |||
5 3 | |||
2 1 | |||
4 5 | |||
3 2 | |||
'''Ieșire''' | |||
16 | |||
== Explicație == | |||
Moș Crăciun va cumpăra un cadou cu prețul 2, două cu prețul 3 și două cu prețul 4. | |||
== Rezolvare == | |||
<syntaxhighlight lang="python"> | |||
def validare_intrare(n, m, magazine): | |||
if not (1 <= n <= 1000): | |||
print("Eroare: n trebuie să fie între 1 și 1000.") | |||
return False | |||
if not (1 <= m <= 100): | |||
print("Eroare: m trebuie să fie între 1 și 100.") | |||
return False | |||
for i, (pret, cantitate) in enumerate(magazine): | |||
if not (0 <= cantitate <= 100): | |||
print(f"Eroare la magazinul {i + 1}: Cantitatea trebuie să fie între 0 și 100.") | |||
return False | |||
if not (1 <= pret <= 100): | |||
print(f"Eroare la magazinul {i + 1}: Prețul trebuie să fie între 1 și 100.") | |||
return False | |||
return True | |||
def suma_minima(n, m, magazine): | |||
def | magazine = sorted(magazine, key=lambda x: x[0]) # Sortăm magazinele după preț | ||
total_cadouri = 0 | |||
suma = 0 | |||
for pret, cantitate in magazine: | |||
if total_cadouri + cantitate >= n: # Dacă avem suficiente cadouri | |||
suma += n * pret | |||
break | |||
suma += cantitate * pret | |||
total_cadouri += cantitate | |||
if total_cadouri < n: | |||
return -1 # Imposibil de cumpărat n cadouri | |||
else: | |||
return suma # Suma minimă necesară | |||
def main(): | |||
n, m = map(int, input("Introduceți numărul de copii (n) și numărul de magazine (m): ").split()) | |||
magazine = [] | |||
print("Introduceți prețul și cantitatea disponibilă pentru fiecare magazin:") | |||
for _ in range(m): | |||
p, c = map(int, input().split()) | |||
magazine.append((p, c)) | |||
rezultat = suma_minima(n, m, magazine) | |||
if rezultat == -1: | |||
print("Imposibil") | |||
else: | |||
print("Suma minima necesara:", rezultat) | |||
if __name__ == "__main__": | if __name__ == "__main__": | ||
main() | |||
</syntaxhighlight> |
Latest revision as of 16:16, 4 January 2024
Cerința[edit | edit source]
Moș Crăciun pregătește cadourile pentru acest an. El trebuie să dea cadouri identice la n copii. Pentru aceasta, a vizitat m magazine (posibil online) și pentru fiecare magazin a aflat prețul cadoului în acel magazin și numărul de cadouri disponibile în acel magazin.
Determinati suma minimă necesară pentru a cumpăra cele n cadouri necesare. Dacă nu se pot cumpăra cele n cadouri afișați mesajul imposibil.
Date de intrare[edit | edit source]
Programul citește de la tastatură numerele n m, iar apoi m perechi numere naturale p c, reprezentând prețul și cantitatea de cadouri disponibile în cele n magazine.
Date de iesire[edit | edit source]
Programul va afișa pe ecran suma totală necesară S sau mesajul imposibil.
Restricții și precizări[edit | edit source]
- 1 ≤ n ≤ 1000
- 1 ≤ m ≤ 100
- 0 ≤ c ≤ 100
- 1 ≤ p ≤ 100
Exemplu:[edit | edit source]
Intrare
5 3
2 1
4 5
3 2
Ieșire
16
Explicație[edit | edit source]
Moș Crăciun va cumpăra un cadou cu prețul 2, două cu prețul 3 și două cu prețul 4.
Rezolvare[edit | edit source]
<syntaxhighlight lang="python"> def validare_intrare(n, m, magazine):
if not (1 <= n <= 1000): print("Eroare: n trebuie să fie între 1 și 1000.") return False
if not (1 <= m <= 100): print("Eroare: m trebuie să fie între 1 și 100.") return False
for i, (pret, cantitate) in enumerate(magazine): if not (0 <= cantitate <= 100): print(f"Eroare la magazinul {i + 1}: Cantitatea trebuie să fie între 0 și 100.") return False
if not (1 <= pret <= 100): print(f"Eroare la magazinul {i + 1}: Prețul trebuie să fie între 1 și 100.") return False
return True
def suma_minima(n, m, magazine):
magazine = sorted(magazine, key=lambda x: x[0]) # Sortăm magazinele după preț total_cadouri = 0 suma = 0
for pret, cantitate in magazine: if total_cadouri + cantitate >= n: # Dacă avem suficiente cadouri suma += n * pret break suma += cantitate * pret total_cadouri += cantitate
if total_cadouri < n: return -1 # Imposibil de cumpărat n cadouri else: return suma # Suma minimă necesară
def main():
n, m = map(int, input("Introduceți numărul de copii (n) și numărul de magazine (m): ").split()) magazine = []
print("Introduceți prețul și cantitatea disponibilă pentru fiecare magazin:")
for _ in range(m): p, c = map(int, input().split()) magazine.append((p, c))
rezultat = suma_minima(n, m, magazine)
if rezultat == -1: print("Imposibil") else: print("Suma minima necesara:", rezultat)
if __name__ == "__main__":
main()
</syntaxhighlight>