题目
现有1分,2分,5分的硬币一共60枚,请输出可以让所有硬币之和为1元的分法。(每种分法都必须含有所有面值的硬币)
PS:三重循环的枚举太过繁琐而且比较简单就不整理了
1.两重循环
题解:
#include<stdio.h>
int main(void)
{
int i,j,k;//一分、二分、五分
for(i=1;i<60;i++)
{
for(j=1;j<50;j++)
{
k=60-i-j;
if((i+2*j+5*k)==100)
printf("%d %d %d\n",i,j,k);
}
}
return 0;
}
2. 利用方程组消元一层循环解决问题
思路:对问题进行分析,设一分、两分、五分的硬币个数分别为i、j、k,列出方程组
{
i+j+k=60
i+2j+5k=100
}
化简求出关系:
j=40-k*4(k<=10)
代码如下:
#include <stdio.h>
int main(void)
{
int i = 0;
int one, two, five;
for (five = 0; five <= 10; five++)
{
two = 40 - 4 * five;
one = 60 - two - five;
if (one + two * 2 + five * 5 == 100)
{
i++;
printf ("兑换方案%2d:1分硬币%2d枚,2分硬币%2d枚,5分硬币%2d枚\n", i, one, two, five);
}
}
printf ("共有%d种兑换方案\n", i);
return 0;
}