花的折纸方法大全 图解:一道基础的编程题。有谁愿意帮我啊!

来源:百度文库 编辑:杭州交通信息网 时间:2024/05/08 16:50:19
把100元RMB换成有50元、20元、10元、5元、2元、1元面值的。张数可以任意组合。问有多少种组合方式。或者把这些组合方式列出来。
先给20分吧。回答好的话再加。谢谢了!
是50元、20元、10元、5元、2元、1都要有
还有麻烦用C++的形式写出来。

#include <stdio.h>
main()
{
int a,b,c,d,e,f;
int cnt=1;
for(a=1;a<=2;a++)
for(b=1;b<=5;b++)
for(c=1;c<=10;c++)
for(d=1;d<=20;d++)
for(e=1;e<=50;e++)
for(f=1;f<=100;f++)
if(a*50+b*20+c*10+d*5+e*2+f==100)
printf("%d: 五十元%d张,二十元%d张,十元%d张,五元%d张,二元%d张,一元%d张\n",cnt++,a,b,c,d,e,f);
}

共15个组合

有四种组合
#include<stdio.h>
main(){
int a,b,c,d,e;
for(a=1;a<=2;a++){
for(b=1;b<=5;b++){
for(c=1;c<=10;c++){
for(d=1;d<=20;d++){
for(e=1;e<=100;e++){
if(a*50+b*20+c*10+d*5+e==100&&a!=0&&b!=0&&c!=0&&d!=0&&e!=0)
printf("%d*50+%d*20+%d*10+%d*5+%d=100",a,b,c,d,e);
}
}
}
}
}

}

#include<stdio.h>
main(){
int a,b,c,d,e;
int i=1;
for(a=1;a<=2;a++){
for(b=1;b<=5;b++){
for(c=1;c<=10;c++){
for(d=1;d<=20;d++){
for(e=1;e<=100;e++){
if(a*50+b*20+c*10+d*5+e==100)i+=1;
printf("%d*50+%d*20+%d*10+%d*5+%d=100",a,b,c,d,e);/*输出各种组合*/
}
}
}
}
}
printf("%d\n",i);/*输出方法数*/
}

嗯,楼上诸位用的穷举法,可以实现目标,但是效率。。。应该有更好的方法实现吧。

贪心算法吧?

#include <iostream>
using namespace std;

int main()
{
int a,b,c,d;
int k=0;

/*要是没种面额的货币都有,则50元最多1张,20元最多1张,10元最多2张*/
for(a=1;a<=2;a++){ //10yuan
for(b=1;70+10*a+5*b<=97;b++ ) { //5yuan
for(c=1;70+10*a+5*b+2*c<=99;c++ ){ //2yuan
for(d=1;70+10*a+5*b+2*c+d<=100;d++){ //1yuan
if( 70+10*a+5*b+2*c+d==100){
cout<<"50+20+10x"<<a<<"+5x"<<b<<"+2x"<<c<<"+1x"<<d<<'\n';
k++;
}
}
}
}
}

cout<<"共有"<<k<<"种组合!\n";

return 0;
}

这才是正中的C++,在VC++中测试通过!答案15种!