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;
} 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值