主题:100元人民币换成1,2,5,10,50元的兑换方法
xxcvb
[专家分:0] 发布于 2008-01-21 16:19:00
如题,求解,带说明最好
回复列表 (共4个回复)
沙发
xxcvb [专家分:0] 发布于 2008-01-21 16:43:00
CLS
LET a = 1: b = 2: c = 5: d = 10: e = 50
f = a + b + c + d + e
g = 100 - f
FOR x = 0 TO 32
FOR y = 0 TO 16
FOR z = 0 TO 6
FOR o = 0 TO 3
IF (x * 1) + (y * 2) + (z * 5) + (o * 10) + f = 100 THEN PRINT x, y, z, o, f
NEXT o, z, y, x
板凳
Matodied [专家分:7560] 发布于 2008-01-22 22:11:00
你的程序需要循环9000多次,效率太低。
50元最多换i1张(i1=2),10元最多换i2张(i2=(100-i1*50)\10),5元最多换i3张(i3=(100-i1*50-i2*10)\5),以此类推。
程序:
CLS
PRINT 1, 2, 5, 10, 50: PRINT : PRINT
FOR i1 = 0 TO 2
s1 = i1 * 50
FOR i2 = 0 TO (100 - s1) \ 10
s1 = i1 * 50 + i2 * 10
FOR i3 = 0 TO (100 - s1) \ 5
s1 = i1 * 50 + i2 * 10 + i3 * 5
FOR i4 = 0 TO (100 - s1) \ 2
s1 = i1 * 50 + i2 * 10 + i3 * 5 + i4 * 2
i5 = 100 - s1
PRINT i5, i4, i3, i2, i1
NEXT i4, i3, i2, i1
END
总共循环2498次。
3 楼
staa [专家分:3690] 发布于 2008-01-29 17:48:00
这个题目我以前遇到过,有一个原则就是“取大优先”
比如287元,
它大于100,就先减去100,100的标记上加1
187大于100,就减去100,100的标记上加1
87小于100,但大于50,就减去50,50的标记上加1
37小于50,但大于10,就减去10,10的标记上加1
.....
100,50,10,5,2,1以这个顺序标记
呵呵,好象跑题了
4 楼
staa [专家分:3690] 发布于 2008-01-29 17:53:00
人家楼主的题目并不要求所有的组合,你们整出几千个方案做什么???
我来回复