C语言程序把10块钱转换成1块2块5块有多少种换法

C语言的程序 求大神解答
2025-02-27 15:25:41
推荐回答(5个)
回答1:

// 正确的应该是10种换法,结合无穷例举法:
#include 
void main(void)
{
int one_RMB,two_RMB,five_RMB,iCount;
one_RMB=two_RMB=five_RMB=iCount=0;
   
printf("\t序号\t壹元\t贰元\t伍元\n");
for ( one_RMB=0;one_RMB<=10;one_RMB++)         // 控制1元面值
{
for (two_RMB=0;two_RMB<=5;two_RMB++)      // 控制2元面值
{
for (five_RMB=0;five_RMB<=2;five_RMB++) // 控制5元面值
{
if (one_RMB*1+two_RMB*2+five_RMB*5==10)
{
iCount++;
printf("\t %d\t %d张\t %d张\t %d张\n",iCount,one_RMB,two_RMB,five_RMB);
}
}
}
}
printf("\n\t共有%d种换法\n",iCount);
}

回答2:

这个题目是典型的递归题目,你可以这么想比如如果先拿一个5块,那么方法就变成5块钱可以有多少种方法。这样所有的方法加起来就可以了。

#include
#include
int Method(int rem,int last) //last 是为了避免重复
{
if(rem==0)
return 1;
if(rem<0)
return 0;
int m=0;
if(1>=last) //拿一个1快的后有多少种方法
m+=Method(rem-1,1);
if(2>=last) // 拿了2块的还有多少
m+=Method(rem-2,2);
if(5>=last) //拿了5快的还剩多少
m+=Method(rem-5,5);
return m;

}
int main()
{
cout< return 0;
}

回答3:

void main()
{
int i=0,RMB;
int n1,n2,n5;
printf("请输入要转换的数额:");
scanf("%d",&RMB);
for(n1=0;n1<=RMB;n1++){
for(n5=0;n5<=2;n5++){
if((RMB-n1-5*n5)%2==0){
n2=(RMB-n1-5*n5)/2;
if(n2>=0){
printf("1元=%d张,2元=%d张,5元=%d张\n",n1,n2,n5);
i++;
}
}
}
}
printf("所以,总共有%d种换法\n",i);
}

回答4:

这类问题属多点求值类问题,采用穷举法循环取值,判断符合条件者输出。
1 算法:
取k5= 0~2
取k2 = 0~5
取k1= 0~10
求和 sum=5*k5+2*k2+1*k1
判断 若 sum==10 则 {计数、输出 k5,k2,k1,退出内循环}
下一个 k1,k2,k5
2 分析:
本例使用三重循环变量k5,k2,k1来模拟5、2、1块的张数。
循环初值的确定,每样都至少有一张,初值当取1,若允许单一币种兑换,则初值当取0。
循环终值的确定,最大取值由 10/币值 获得。如 5块时最多为 10/5 =2。余类推。
3 推广应用
本算法还应用于输出水仙花数、百钱百鸡、回文数等问题的求解。弄懂程序类型特点,可触类旁通收举一反三之效。

回答5:

int main(int argc, const char * argv[])
{

static int a = 10;
int count = 0;
int b = 1,c = 2,d = 5;
int i,j,k;;
for (i = 0; i < 10; i++) {
for (j = 0; j<10; j++) {
for (k = 0; k<10; k++) {
if (i*b + j*c + k*d == a) {
count ++;
}
}
}
}
printf("count = %d",count);
return 0;
}
给分 走人-。 -