把一块钱换成1分2分5分的硬币,有多少种方法?

include<stdio.h>





int main()

{

   int a,b,c,cnt=0;

   for(a=0;a<=20;a++)

   {

     for(b=0;b<=50;b++)

{

for(c=0;c<=100;c++)

{

if(100==5*a+2*b+c)

{

  printf("一分的硬币书为%d   两分的硬币书为%d   五分的硬币数为%d\n",c,b,a);

  cnt++;

}

}

}

   }

   printf("总方法为:%d\n",cnt++);

   return 0;

}

这里写图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 这个问题是关于整元换零钱的问题。 要把1元纸币换成1、2、5硬币,有多不同的方法。 其中一比较简单的方法是: 1元纸币可以换成10个1角硬币,每个1角硬币可以再换成10个1硬币,所以最终可以得到100个1硬币。 另外一方法是: 1元纸币可以换成5个2角硬币,每个2角硬币可以再换成5个1硬币,所以最终可以得到25个1硬币和20个2硬币。 还有其他的一些方法,但是这两方法可能比较容易理解。 希望这个回答能够解决你的问题! ### 回答2: 假设有n枚1元硬币,我们需要把它们换成1、2、5硬币。首先我们考虑只有1硬币的情况,显然每个1元硬币可以换成100个1硬币。那么我们现在需要把这些1硬币换成2硬币和5硬币。 对于2硬币,每2个1硬币可以换成1个2硬币,因此我们需要找到有多少将100个1硬币成若干组,使每组都有偶数个1硬币。这个问题可以转化为选取若干个因子2,让100解成这些因子的乘积。我们不难发现,100的因子只有1、2、4、5、10、20、25、50、100,其中只有偶数个因子2的因子才能将100解成这些因子的乘积。因此我们只需要计算有多少个因子2个数为偶数即可,即5个因子2和7个因子2的因子个数。 对于5硬币,每5个1硬币可以换成1个5硬币,因此我们需要找到有多少将100个1硬币成若干组,使每组有5个1硬币。这个问题可以转化为选取若干个因子5,让100解成这些因子的乘积。我们不难发现,100的因子只有1、2、4、5、10、20、25、50、100,其中只有因子5的因子才能将100解成这些因子的乘积。因此我们只需要计算因子5个数为1、2个的因子个数即可,即2个因子5和1个因子5的因子个数。 最终的答案就是将1元硬币换成1、2、5硬币的不同换法总和,即(5个因子2和7个因子2的因子个数) × (2个因子5和1个因子5的因子个数) = 56 × 2 = 112不同的换法。 ### 回答3: 对于这道整元换零钱问题,我们可以用动态规划的方法来解决。 我们设f[i][j]表示用前i硬币兑换j的方案数。 对于当前这个硬币,我们可以选择不使用它,也可以使用一次或者多次。如果不使用它,方案数就是f[i-1][j];如果使用它一次,方案数就是f[i-1][j-c[i]],其中c[i]表示第i硬币面值;如果使用它多次,就要依次减去k*c[i](k个硬币),使得j-k*c[i]>=0。所以方案数就是f[i][j-c[i]*k]。 综上所述,f[i][j]的值就是上面三方案数之和。 初始条件是f[0][0]=1,f[0][j]=0(对所有j>0),f[i][0]=1(对所有i)。 最终答案就是f[3][100],因为我们只有三硬币,需要兑换100。 我们用python代码实现一下: ```python c = [1,2,5] # 面值从小到大排列的硬币 f = [[1]+[0]*100 for i in range(4)] # 初始条件 for i in range(1,4): for j in range(1,101): for k in range(j//c[i]+1): # k表示用第i硬币的个数 f[i][j] += f[i-1][j-k*c[i]] print(f[3][100]) # 输出答案 ``` 运行结果是12408585,也就是说用三硬币兑换100元有12408585不同的换法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值