0527 - Preturi1: Difference between revisions
Pagină nouă: == Cerinţa == Gigel trebuie să cumpere '''n''' produse, pentru fiecare produs cunoscându-se cantitate necesară. În oraș sunt '''m''' magazine, în fiecare magazin găsindu-se produsele dorite la anumite prețuri. Determinați suma totală minimă necesară pentru a cumpăra produsele dorite, știind că Gigel trebuie să cumpere toate produsele din același magazin. == Date de intrare == Programul citește de la tastatură, în ordine: * numărul de produse '''n''' * '... |
No edit summary |
||
Line 15: | Line 15: | ||
* prețurile produselor sunt numere naturale nenule mai mici sau egale cu '''1000''', sau '''-1''', cu semnificația de mai sus | * prețurile produselor sunt numere naturale nenule mai mici sau egale cu '''1000''', sau '''-1''', cu semnificația de mai sus | ||
* trebuie cumpărate toate produsele, din același magazin | * trebuie cumpărate toate produsele, din același magazin | ||
== Exemplu == | == Exemplu 1 == | ||
; Intrare | ; Intrare | ||
5 | |||
4 4 5 1 2 | |||
3 | |||
5 8 6 2 6 | |||
-1 4 1 1 5 | |||
6 6 8 3 9 | |||
; Ieșire | ; Ieșire | ||
Datele de intrare corespund restrictiilor impuse | |||
96 | |||
== Exemplu 2 == | |||
; Intrare | |||
101 | |||
4 4 5 1 2 | |||
3 | |||
5 8 6 2 6 | |||
-1 4 1 1 5 | |||
6 6 8 3 9 | |||
; Ieșire | |||
Datele de intrare nu corespund restrictiilor impuse | |||
== Explicatie == | == Explicatie == | ||
La magazinul '''1''' produsele costă '''96''', la magazinul '''3''' produsele costă '''109''', iar din magazinul '''2''' nu se poate cumpăra produsul '''1'''. | La magazinul '''1''' produsele costă '''96''', la magazinul '''3''' produsele costă '''109''', iar din magazinul '''2''' nu se poate cumpăra produsul '''1'''. | ||
== Rezolvare == | == Rezolvare == | ||
<syntaxhighlight lang="python" line> | <syntaxhighlight lang="python" line> | ||
def min_sum(n, quantities, m, prices): | |||
n = int(input()) | total_min = float('inf') | ||
for i in range(m): | |||
m = int(input()) | if all(p != -1 for p in prices[i]): | ||
total = sum(prices[i][j] * quantities[j] for j in range(n)) | |||
total_min = min(total_min, total) | |||
return total_min | |||
def validare(n, m, quantities, prices): | |||
if not 1 <= n <= 100 or not 1 <= m <= 100: | |||
return False, "Datele de intrare nu corespund restrictiilor impuse" | |||
for q in quantities: | |||
if not 1 <= q <= 1000: | |||
return False, "Datele de intrare nu corespund restrictiilor impuse" | |||
for row in prices: | |||
for p in row: | |||
if not (-1 <= p <= 1000): | |||
return False, "Datele de intrare nu corespund restrictiilor impuse" | |||
return True, "Datele de intrare corespund restrictiilor impuse" | |||
def main(): | |||
print("Introduceți numărul de produse:") | |||
n = int(input()) | |||
print("Introduceți cantitățile necesare pentru fiecare produs:") | |||
quantities = list(map(int, input().split())) | |||
print("Introduceți numărul de magazine:") | |||
m = int(input()) | |||
print("Introduceți prețurile pentru fiecare produs în fiecare magazin:") | |||
prices = [list(map(int, input().split())) for _ in range(m)] | |||
valid, message = validare(n, m, quantities, prices) | |||
print(message) | |||
if not valid: | |||
return | |||
total_min = min_sum(n, quantities, m, prices) | |||
if total_min == float('inf'): | |||
print("Nu este posibilă cumpărarea tuturor produselor.") | |||
else: | |||
print(total_min) | |||
if __name__ == "__main__": | |||
if | main() | ||
</syntaxhighlight> | </syntaxhighlight> |
Latest revision as of 16:19, 12 December 2023
Cerinţa[edit | edit source]
Gigel trebuie să cumpere n produse, pentru fiecare produs cunoscându-se cantitate necesară. În oraș sunt m magazine, în fiecare magazin găsindu-se produsele dorite la anumite prețuri. Determinați suma totală minimă necesară pentru a cumpăra produsele dorite, știind că Gigel trebuie să cumpere toate produsele din același magazin.
Date de intrare[edit | edit source]
Programul citește de la tastatură, în ordine:
- numărul de produse n
- n numere naturale, reprezentând cantitățile necesare din fiecare produs
- numărul de magazine m
- m șiruri de câte n numere, șirul i conținând în ordine prețurile celor n produse la magazinul i. Dacă la un magazin nu există un anumit produs, valoarea prețului va fi -1
Date de ieșire[edit | edit source]
Programul va afișa pe ecran numărul S, reprezentând suma minimă determinată.
Restricţii şi precizări[edit | edit source]
- 1 ⩽ n , m ⩽ 100
- cantitățile necesare sunt numere naturale nenule mai mici sau egale cu 1000
- prețurile produselor sunt numere naturale nenule mai mici sau egale cu 1000, sau -1, cu semnificația de mai sus
- trebuie cumpărate toate produsele, din același magazin
Exemplu 1[edit | edit source]
- Intrare
5 4 4 5 1 2 3 5 8 6 2 6 -1 4 1 1 5 6 6 8 3 9
- Ieșire
Datele de intrare corespund restrictiilor impuse 96
Exemplu 2[edit | edit source]
- Intrare
101 4 4 5 1 2 3 5 8 6 2 6 -1 4 1 1 5 6 6 8 3 9
- Ieșire
Datele de intrare nu corespund restrictiilor impuse
Explicatie[edit | edit source]
La magazinul 1 produsele costă 96, la magazinul 3 produsele costă 109, iar din magazinul 2 nu se poate cumpăra produsul 1.
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line> def min_sum(n, quantities, m, prices):
total_min = float('inf') for i in range(m): if all(p != -1 for p in prices[i]): total = sum(prices[i][j] * quantities[j] for j in range(n)) total_min = min(total_min, total) return total_min
def validare(n, m, quantities, prices):
if not 1 <= n <= 100 or not 1 <= m <= 100: return False, "Datele de intrare nu corespund restrictiilor impuse" for q in quantities: if not 1 <= q <= 1000: return False, "Datele de intrare nu corespund restrictiilor impuse" for row in prices: for p in row: if not (-1 <= p <= 1000): return False, "Datele de intrare nu corespund restrictiilor impuse" return True, "Datele de intrare corespund restrictiilor impuse"
def main():
print("Introduceți numărul de produse:") n = int(input()) print("Introduceți cantitățile necesare pentru fiecare produs:") quantities = list(map(int, input().split())) print("Introduceți numărul de magazine:") m = int(input()) print("Introduceți prețurile pentru fiecare produs în fiecare magazin:") prices = [list(map(int, input().split())) for _ in range(m)]
valid, message = validare(n, m, quantities, prices) print(message) if not valid: return
total_min = min_sum(n, quantities, m, prices) if total_min == float('inf'): print("Nu este posibilă cumpărarea tuturor produselor.") else: print(total_min)
if __name__ == "__main__":
main()
</syntaxhighlight>