
C语言问题:要将100元钱换成1元,2元,5元的零钱,编程求出有几种换法?这么编程为什么不行?求高手指教!
void main()
{
int x,y,z,i=0;
for(x=1;x<=100;x++)
for(y=1;y<=50;y++)
for(z=1;z<=20;z++)
{
if(x+2*y+5*z==100)
printf("There are %d ways.\n",i);
}
} 展开
程序源码如下:
循环嵌套循环次数少的尽量在外!
#include<iostream>
#include<stdlib.h>
using namespace std;
int main()
{
int count = 0;//换法数量
int temp;
int m = 100;//总钱数
int a = 1;//1元面值
int b = 2;//2元面值
int c = 5;//5元面值
//a, b, c的值还可以是10,20,50
for (int i = 0; i <= m / b; ++i)//++i的意义在于100必须换成三类纸币,需要大于等于1张
{
for (int j = 0; j <= m / c; ++j) //5元
{
temp = m - (b * i + c * j);
//只要2元和5元的总和加起来不大于100,剩下的都换1元
if (temp >= 0 && temp % a == 0)
{
++count;//换法种数+1
}
}
}
cout << "换法有" << count << "种\n";//输出换法种数
system("pause");
return 0;
}
程序运行结果如下:
扩展资料:
其他实现方法:
#include <stdio.h>
int main()
{
int x,y,z,i=0;
for(x=0;x<=20;x++)
for(y=0;y<=50;y++)
for(z=0;z<=100;z++)
{
if(x*5+2*y+z==100)
i++;
}
printf("There are %d ways.\n",i);
return 0;
}
int main()
{
int x,y,z,i=0;
for(x=0;x<=20;x++)
for(y=0;y<=50;y++)
for(z=0;z<=100;z++)
{
if(x*5+2*y+z==100)
i++;
}
printf("There are %d ways.\n",i);
return 0;
}
这样就可以了
嵌套循环有个潜规则:将循环次数少的循环作为外循环。
广告 您可能关注的内容 |