C语言分硬币问题

C语言之换硬币

现在有这样一道题。假设给你一分硬币两分,硬币五分,硬币共60枚。总共需要将它们兑换成100分的硬币,你有多少种换法?

假设x,y,z分别为一分,两分,五分硬币的个数则:
x+y+z=60
x+2y+5z=100

一,三层for循环

#include<stdio.h>
int main(void)
{
 int coin1,coin2,coin5;
 for(coin1=0;coin1<=60;coin1++)
  for(coin2=0;coin2<=50;coin2++)
   for(coin5=0;coin5<=20;coin5++)
   {
 if(coin1+coin2+coin5==60&&1*coin1+2*coin2+5*coin5==100)
    printf("一分硬币%d枚,两分硬币%d枚,五分硬币%d枚\n",coin1,coin2,coin5);
   } 
 return 0;
} 

二,两层for循环

消去一个未知数,例如:
消去x:
y+4z=40

#include<stdio.h>
int main(void)
{
 int coin1,coin2,coin5;
 for(coin2=0;coin2<=50;coin2++)
   for(coin5=0;coin5<=20;coin5++)
   {
    if(coin2+4*coin5==40)
    {
     coin1=60-coin2-coin5;
     printf("一分硬币%d枚,两分硬币%d枚,五分硬币%d枚\n",coin1,coin2,coin5);
    }
   } 
 return 0;
}

三,三层for循环

我们可以将y,z变为关于x的关系式,即:

由y+4z=40,x+y+z=60得

z=1/3(x-20)

y=1/3(200-4x)

而且y,z必须大于等于0则有20<=x<=50

#include<stdio.h>
int main(void)
{
 int coin1,coin2,coin5;
 for(coin1=20;coin1<=50;coin1++)
      {
       coin5=(coin1-20)/3;
       coin2=(200-4*coin1)/3;
   if(coin1+coin2+coin5==60)
     printf("一分硬币%d枚,两分硬币%d枚,五分硬币%d枚\n",coin1,coin2,coin5);           
    }
 return 0;
} 

发布了4 篇原创文章 · 获赞 1 · 访问量 216

猜你喜欢

转载自blog.csdn.net/weixin_45832286/article/details/103568666
今日推荐