一个数学题 求救 999块钱 用99张人民币来表示 100 50 10 5 1 都

用程序,枚举法

附上代码:

#include<stdio.h>

int main()

{

int a,b,c,d,e,s=0;

{for(a=0;a<=9;a++)

for(b=0;b<=19;b++)

for(c=0;c<=99;c++)

for(d=0;d<=199;d++)

for(e=0;e<=999;e++)

{

if((a*100+b*50+c*10+d*5+e==999)&&(a+b+c+d+e==99))

{printf("%d %d %d %d %d \n",a,b,c,d,e);

s+=1;}

}}

printf("%d",s);

}

附上运行结果:

共513种解

临时编的,可能有漏解,求采纳

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-02-11
回答这个问题前,首先要明确既然有这个问题,那么命题人就已经证明过它是有解的,即使没有解,也可以先假设它有解,算出答案就有解,否则可能(是可能)无解。楼上的回答是基于5元的,那么我取五种币值的中值10元为基准,方便下面的取值,以下提出一种思路。首先对于999,我们期望能用有限的币值表示一个整百数(这样比较简单),所以我们先拿出9,9=1*5+4*1,如此余下99-5=94张,同样,从剩下的990中拿出90,90=1*50+4*10,如此剩下94-5=89张。这样一来,我们就是要用89张来表示剩下的900。上面说了,用10元为基准,89张10元的话是890,但是要的是900。要用有限的货币数表示比自己多的值,考虑取与10元相邻比10元大的50元。由于只要取1张50元,就可以使剩下的900-50=850小于(89-1)*10=880,即此时货币数表示比自己少的值(当然是以10元为基准),所以我们就取1张50元。那么问题就变成了用88张表示850。根据以上的讨论,我们应该找与10元相邻比10元小的5元来填充溢出的价值(这样就相当于把10元“变”成5元)。那么设有x张5元,根据题意列出方程:10*(88-x)=850-5x,解得x=6,即6张5元。那么根据这种讨论的结果就明朗了,答案是2张50元,86张10元,7张5元,4张1元。同理基于不同币值有不同结果。当然还有其他思路。纯手打,望采纳。
第2个回答  2015-02-11
100:5张,50:1张。10:4张,5:80张,1:9张
第3个回答  2015-02-11
10张50的 14张10的 71张5的 4张1的
第4个回答  2019-03-13
100×2+50×3+20×10+10×21+5×44+1×19