c语言的穷举法???

来源:百度知道 编辑:UC知道 时间:2024/04/30 21:15:58
这下面..i<=20,j<=50,k<=100..是为什么呀..还有那个40是什么意思????

1元硬币换成5分、2分、1分有多少种换法?如果每种分币至少一个有多少种方法?如果总的个数为40有多少种换法?

源程序如下:

#include<iostream.h>

Void main()

{

int s =0;//求总个数初始化为0;

for(int i=0;i<=20;i++)//穷举所有的5分的个数

for(int j=0;j<=50;j++)//穷举所有的2分的个数

for(int k=0;k<=100;k++)//穷举所有的1分的个数

if((i*5+j*2+k==100)&&(i+j+k==40))

{

s++;

cout<<i<< " "<<j<<" "<<k<<endl;

}

cout<<"总个数为: "<<s<<endl;

}

20个5分的是1元
50个2分的是1元
100个1分的是1元
上面定义的是这三种面值的银币不能超过的数量~
必须小于这些数量,要不然不就超过1元了,就不符合题意了~~

40当然是硬币总数是40是意思了.
5分不会超过20个,否则就超过1元了,同理,
2分不会超过50个,1分不会超过100个.

和我楼上的想法

楼上正解,算法的基本问题