Advertentie | |
|
14-05-2008, 22:46 | ||
Citaat:
__________________
Mathematicians are like Frenchmen: whenever you say something to them, they translate it into their own language, and at once it is something entirely different
|
14-05-2008, 22:50 | ||
Citaat:
4 keer met 50 cent en de andere 50 cent in 4 mogelijkheden opgedeelt (0*20,1*20,2*20) rest 10 cent of 1 van 50 cent 6 keer met 20 cent en rest 10 cent (0*20,1*20,2*20,3*20,4*20,5*20) Geeft samen 11x ipv. 8x
__________________
Mathematicians are like Frenchmen: whenever you say something to them, they translate it into their own language, and at once it is something entirely different
|
15-05-2008, 15:19 | |
Ik heb even vlug een brute-force simulatie laten doen voor je, als je 3.85 euro moet hebben, met munten van 5 cent tot en met 2 euro, dan zijn er 2278 combinaties mogelijk.
Voor 3.90 euro zijn er 214 combinaties (10 cent tot en met 2 euro). De broncode voor deze simulatie is de volgende (in Python): Code:
def Sum(munt): sum = 0 values = [200,100,50,20,10,5] for i in range(6): sum += values[i] * munt[i] return sum totaal = 385 poss = 0; munt = [0,0,0,0,0,0] for munt[0] in range(totaal//200+1): for munt[1] in range(totaal//100+1): for munt[2] in range (totaal//50+1): for munt[3] in range(totaal//20+1): for munt[4] in range(totaal//10+1): for munt[5] in range(totaal//5+1): if Sum(munt) == totaal: print munt poss += 1 print poss
__________________
vaknar staden långsamt och jag är full igen (Kent - Columbus)
|
15-05-2008, 18:03 | ||
Citaat:
__________________
Mathematicians are like Frenchmen: whenever you say something to them, they translate it into their own language, and at once it is something entirely different
|
15-05-2008, 20:16 | |
Hmm, maar ik zie juist dat ik met die 25 geen rekening gehouden heb, ik ga die er toch even bijsmijten. Voor de rest ben ik bijna zeker dat mijn simulatie vrij goed zou moeten werken, alleen doet hij er logischerwijs wel eventjes over (ik had geen zin om er backtracking in te steken).
Met die extra eis toch wat minder resultaten: 796 voor 3.85 euro in 5 cent tot 2 euro 176 voor 3.90 euro in 10 cent tot 2 euro (om dat te berekenen moet je een hash mark/spoorwegteken (#) voor de 17e lijn in de code zetten (laatste for-lus, zodat hij geen 5-centjes gebruikt, maar die steeds op 0 houdt). Nieuwe broncode: Code:
def SumMunten(munt): sum = 0 values = [200,100,50,20,10,5] for i in range(6): sum += values[i] * munt[i] return sum totaal = 385 maxMunt = 25 poss = 0; munt = [0,0,0,0,0,0] for munt[0] in range(totaal//200+1): for munt[1] in range(totaal//100+1): for munt[2] in range (totaal//50+1): for munt[3] in range(totaal//20+1): for munt[4] in range(totaal//10+1): for munt[5] in range(totaal//5+1): if (SumMunten(munt) == totaal) and (sum(munt) <= maxMunt): print munt poss += 1 print poss
__________________
vaknar staden långsamt och jag är full igen (Kent - Columbus)
|
18-05-2008, 12:18 | |
Ach, dat noem ik niet echt een algoritme; dit is gewoon puur brute-force lopen proberen, over de berekeningen doet hij bij mij ongeveer een halve minuut (wel met veel programma's open en nog een virtual machine). Een echt algoritme zou hetzelfde zijn maar dan met backtracking in op aantal munten of op de opgetelde waarde of een combinatie van beide criteria. En ik denk nu opeens dat ik de zoekruimte nog verder kan afbakenen, zeker voor de heel kleine muntjes en dat zal wel een performanceboost geven.
Hierzo de nieuwe code Code:
def SumMunten(munt): sum = 0 values = [200,100,50,20,10,5] for i in range(6): sum += values[i] * munt[i] return sum totaal = 385 maxMunt = 25 poss = 0; munt = [0,0,0,0,0,0] for munt[0] in range(min(totaal//200,maxMunt)+1): for munt[1] in range(min(totaal//100,maxMunt)+1): for munt[2] in range (min(totaal//50,maxMunt)+1): for munt[3] in range(min(totaal//20,maxMunt)+1): for munt[4] in range(min(totaal//10,maxMunt)+1): for munt[5] in range(min(totaal//5,maxMunt)+1): if (SumMunten(munt) == totaal) and (sum(munt) <= maxMunt): print munt poss += 1 print poss
__________________
vaknar staden långsamt och jag är full igen (Kent - Columbus)
|
Advertentie |
|
|
|