pascal将一百元钱兑换成50元,20元和10元的小钞票,共有多少种方案,输出每一种兑换方法

只用一重循环,最好还有说明为什么这么做。
2025-02-24 03:36:09
推荐回答(2个)
回答1:

可以用动态规划的思想,将问题拆分成若干子问题

定义状态f[i]表示用题中3种纸币兑换i元的方案总数,则有

f[i]=∑(f[i-j]); 其中j为50、20、10,边界为f[0]~f[9]为0;

又因为题中所有数据均为10的整倍数,可以同时除以10,再进行以上DP,则范围缩小10倍,也可以省去很多无效枚举(如24、33之类非整10的数),此时的边界为f[0]=0;

这个是1维的,不知道符不符合LZ的要求……
临时想的算法,没有严格验证正确性,如有问题,请追问,谢谢。

回答2:

var a,b,c,t:integer;
begin
for a:=1 to 10 do
for b:=1 to 5 do
for c:=1 to 2 do
begin
if a*10+b*20+c*50=100 then begin
t:=t+1;
writeln(a*10,'+',b*20,'+',c*50,' ',t);
end;
end;
readln;
end.
用我的吧.