-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathcoinChange_problem.py
62 lines (40 loc) · 1.47 KB
/
coinChange_problem.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
import math
class Monedas:
def __init__(self, valor=0, cantidad=0):
self.cantidad = cantidad
self.valor = valor
def __str__(self):
return '{} Monedas de {} euro\n'.format(self.cantidad, self.valor)
def objetivo(monedas):
suma = 0
for moneda in monedas:
suma += moneda.cantidad
return suma
def select(candidate_set):
candidate_selected = None
limit = -math.inf
for candidate in candidate_set:
if limit < candidate.valor:
candidate_selected = candidate
limit = candidate.valor
return candidate_selected
def coinChange(conjunto_monedas, cambio):
candidates_set = conjunto_monedas[:]
candidates_selected = []
c = cambio
candidate_selected = None
while c != 0 and candidates_set:
candidate = select(candidates_set)
candidates_set.remove(candidate)
candidate.cantidad = min(candidate.cantidad, c // candidate.valor)
if candidate.cantidad > 0:
candidates_selected.append(candidate)
c = c - candidate.valor * candidate.cantidad
return candidates_selected
if __name__ == "__main__":
monedas = [Monedas(1,100), Monedas(5,100), Monedas(10,100), Monedas(15,100), Monedas(25,100), Monedas(50,100),
Monedas(100,100), Monedas(200,100), Monedas(500,100)]
cambio = coinChange(monedas, 467)
for monedas in cambio:
print(monedas)
print("El número de monedas es: ", objetivo(cambio) )