某人想将一张面值为100元的人民币兑换成5元,1元,和0.5元面值的纸币,但要求零钱总数为100张,且每种面值纸币至少一张.var i,j,a:integer;beginfor i:=1 to 20 dofor j:=1 to 100 dofor a:=1 to 200 doif (i+j+a=100) and (
来源:学生作业帮助网 编辑:作业帮 时间:2024/07/08 08:55:13
![某人想将一张面值为100元的人民币兑换成5元,1元,和0.5元面值的纸币,但要求零钱总数为100张,且每种面值纸币至少一张.var i,j,a:integer;beginfor i:=1 to 20 dofor j:=1 to 100 dofor a:=1 to 200 doif (i+j+a=100) and (](/uploads/image/z/4056503-23-3.jpg?t=%E6%9F%90%E4%BA%BA%E6%83%B3%E5%B0%86%E4%B8%80%E5%BC%A0%E9%9D%A2%E5%80%BC%E4%B8%BA100%E5%85%83%E7%9A%84%E4%BA%BA%E6%B0%91%E5%B8%81%E5%85%91%E6%8D%A2%E6%88%905%E5%85%83%2C1%E5%85%83%2C%E5%92%8C0.5%E5%85%83%E9%9D%A2%E5%80%BC%E7%9A%84%E7%BA%B8%E5%B8%81%2C%E4%BD%86%E8%A6%81%E6%B1%82%E9%9B%B6%E9%92%B1%E6%80%BB%E6%95%B0%E4%B8%BA100%E5%BC%A0%2C%E4%B8%94%E6%AF%8F%E7%A7%8D%E9%9D%A2%E5%80%BC%E7%BA%B8%E5%B8%81%E8%87%B3%E5%B0%91%E4%B8%80%E5%BC%A0.var+i%2Cj%2Ca%3Ainteger%3Bbeginfor+i%3A%3D1+to+20+dofor+j%3A%3D1+to+100+dofor+a%3A%3D1+to+200+doif+%28i%2Bj%2Ba%3D100%29+and+%28)
某人想将一张面值为100元的人民币兑换成5元,1元,和0.5元面值的纸币,但要求零钱总数为100张,且每种面值纸币至少一张.var i,j,a:integer;beginfor i:=1 to 20 dofor j:=1 to 100 dofor a:=1 to 200 doif (i+j+a=100) and (
某人想将一张面值为100元的人民币兑换成5元,1元,和0.5元面值的纸币,但要求零钱总数为100张,且每种面值纸币至少一张.
var i,j,a:integer;
begin
for i:=1 to 20 do
for j:=1 to 100 do
for a:=1 to 200 do
if (i+j+a=100) and (i*5+j*1+a*0.5=100) then writeln(i,' ',j,' ',a);
end.
解法已给出,
某人想将一张面值为100元的人民币兑换成5元,1元,和0.5元面值的纸币,但要求零钱总数为100张,且每种面值纸币至少一张.var i,j,a:integer;beginfor i:=1 to 20 dofor j:=1 to 100 dofor a:=1 to 200 doif (i+j+a=100) and (
没有验证你的程序,应该没有问题,如果我写的话,下面这句:
if (i+j+a=100) and (i*5+j*1+a div 2=100) then writeln(i,' ',j,' ',a);
我会修改为:
if (i+j+a=100) and (i*5+j*1+a*0.5=100) then writeln(i,' ',j,' ',a);
因为变量都是整数类型,尽量避免浮点数据类型,特别是还有相等判断.
程序是思路就是多重循环,i、j、a三个变量分别表示5元、1元、5毛的张数,分别的取值范围为1..20、1..100、1..200,使用三重循环可以完整的对每一张情况进行枚举,就是IF语句会执行40万次,每次执行的时候i、j、a的值分别在所有的可能的范围内取一次.
IF判断是否满足张数100张、金额100元,满足就输出,作为解答.
关键是要理解FOR循环,建议你运行一下下面的两个简单代码,你就知道FOR循环的功能了:
program exp1;
var i;
begin
for i:=1 to 20 do writeln('i=',i);
end.
你输入电脑运行一下,你会看见结果是下面这样的20次:
i=1
i=2
.
i=20
例子程序2:
program exp1;
var i,j;
begin
for i:=1 to 3 do
for j:=1 to 5 writeln('i=',i,',j=',j);
end.
希望你先画一下输出结果,然后上机测试一下,看看是不是下面的结果:
i=1,j=1
i=1,j=2
i=1,j=3
i=1,j=4
i=1,j=5
i=2,j=1
.
i=3,j=5
现在再回头来理解的三重循环就容易了吧.