C语言题《零钱换整钱》

小明去银行存钱,拿了一堆硬币。已知 1 角的硬币厚度为 1.8mm , 5 角的硬币厚 1.5mm , 1 元的硬币为 2.0mm 。小明将 1 角的硬币放成一摞,将 5 角的硬币硬币放成一摞,将 1 元的硬币放成一摞,发现 3 摞硬币一样高。银行正好把这些硬币换成若干张面值为 10 元的纸币。问小明至少带了多少钱的硬币(元为单位),每种面值的硬币有多少个?
#include<stdio.h>
void main()
{
int x,y,z,s;
for(x=0;x<100;x++)
{
for(y=0;y<100;y++)
{
for(z=0;z<100;z++)
{
s=x+y*5+z*10;
if((s>=100)&&(s%100==0)&&(18*x==15*y)&&(15*y==20*z))
{
printf("%d,%d,%d,%d\n",x,y,z,s/10);
}
}
}
}
}
为什么xyz是小于等于100

首先做这一题的时候,要求是“问小明至少带了多少钱的硬币”,这个范围并不是一下子就得到的,而是一步步估计的,如果一开始令xyz小于等于200,结果会有三个:50 60 45 80;100,120,90,160;150,180,135,240.然后再令xyz小于等于100,就会出现一个结果:50 60 45 80.追问

先要谢谢你!
#include
void main()
{ int n,x,y,z;
for((n=8,i=1);n=100)&&(s%100==0)&&(18*x==15*y)&&(15*y==20*z))
{printf("%d,%d,%d,%d\n",x,y,z,s/10);}
}
}
这样做为什么不行,无法编译。

追答

#include
void main()
{ int n,x,y,z,i,s;
for((n=8,i=1);n=100)&&(s%100==0)&&(18*x==15*y)&&(15*y==20*z))
{printf("%d,%d,%d,%d\n",x,y,z,s/10);}
}
getch();
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-11-07
x应该是10的倍数,y应该是12的倍数,z应该是9的倍数才能一样高(18,15,20的最小公倍数为180),可以提高速度。
第2个回答  2011-11-07
这题问的是至少带了多少钱,并未要求输出所有可能的组合。说不定写程序的人先估算了一下,觉得最小的答案中x,y,z都不会超过100。
相似回答