兑换硬币问题

现有如下问题:
编写一个程序实现用一元人民币换成一分.两分。五分的硬币共六十枚。

第一种方法----三重循环

#include
int main(void)
{
 int c1=0,c2=0,c5=0;
 for(c1=0;c1<=100;c1++)
  for(c2=0;c2<=50;c2++)
   for(c5=0;c5<=20;c5++)
   {
    if((c1+c2+c5==60)&&(c1+2*c2+5*c5==100))
    {
     printf("一元可换为:%2d个一分,%2d个两分,%2d个五分。\n",c1,c2,c5);
    }
   }
 return 0;
}

输出结果为:

一元可换为:20个一分,40个两分, 0个五分。
一元可换为:23个一分,36个两分, 1个五分。
一元可换为:26个一分,32个两分, 2个五分。
一元可换为:29个一分,28个两分, 3个五分。
一元可换为:32个一分,24个两分, 4个五分。
一元可换为:35个一分,20个两分, 5个五分。
一元可换为:38个一分,16个两分, 6个五分。
一元可换为:41个一分,12个两分, 7个五分。
一元可换为:44个一分, 8个两分, 8个五分。
一元可换为:47个一分, 4个两分, 9个五分。
一元可换为:50个一分, 0个两分,10个五分。

第二种方法----两重循环

#include 
int main(void)
{
 int one, two, five;
 for (five = 0; five < 20; five++)
 {
  for (two = 0; two < 50; two++)
  {
   one = 60 - two - five;
   if (one + two * 2 + five * 5 == 100)
   {
    printf ("一元硬币可兑换为:1分硬币%2d枚,2分硬币%2d枚,5分硬币%2d枚\n", one, two, five);
   }
  }
 }
 return 0; 
}

输出结果与上一种方法相同。

代码优化----单层循环

#include 
int main(void)
{
 int one, two, five;
 for (five = 0; five <= 20; five++)
 {
  two = 40 - 4 * five;
  one = 60 - two - five;
  if (one + two * 2 + five * 5 == 100 && two >= 0 && one >= 0)
  {
   printf ("一元硬币可以兑换为:1分硬币%2d枚,2分硬币%2d枚,5分硬币%2d枚\n", one, two, five);
  }
 }
 return 0;
}

我还在研究使用递归的算法。。。

你可能感兴趣的:(兑换硬币问题)