本文转载:http://topic.csdn.net/u/20110913/21/54ef3c9d-6e86-4a4e-8359-cc8f0d728770.html

我把比较经典的解法整理出来,一般的for循环解法有空在整理

思路分析:


设1分个数为x,2分个数为y,5分的硬币个数为z,则1*x+2*y+5*z=10;
5*z=10-x-2*y;即:
z x对应可能的取值
z=0 时x=10 8 6 4 2 0(6个)
z=1 时x=5 3 1(3个)
z=2时x= 0(1个)
总共个数为6+3+1=10.
因此,按照规律,本题目组合总数为10以内的偶数+5以内的奇数+0以内的偶数
某个偶数m以内的偶数个数(包括0)可以表示为m/2+1=(m+2)/2
某个奇数m以内的奇数个数也可以表示为(m+2)/2

所以,求总的组合次数可以编程为:
number=0;
for (int m=0;m<=10;m+=5)
{
number+=(m+2)/2;
}
cout<<number<<endl;
这样程序是不是简单多了(只需要累加3次,而上面的3层循环呢?大家自己想想)。别人考你肯定不是考你会不会编这个程序,是考你如何去使程序的复杂度降低。

C语言代码:

#include <stdio.h>
void main(void) {
 int number=0,m;
 // 因为5*z=10-x-2*y<=10;z的取值范围为0、1、2(注意5*z),所以m的步长是5啊
 for (m=0;m<=10;m+=5) {
  number += (m+2)/2;
 }
 printf("组合数的个数为:%d\n",number);
}

该算法对本题没问题,能否提炼出通用算法。
如果6分、4分、2分组成100分怎么处理呢?

和先前一样的道理,2分为x,4分为y,6分为z。则6*z=100-2*x-4*y,可化简为:
3*z=50-x-2*y
z可能的取值为0、1、2···16,
当z=0时,x可以为50 48 46···2 0(26个)
当z=1时,x可以为47 45 43···3 1(24个)
当z=2时,x可以为44 42 40···2 0(23个)
当z=3时,x可以为41 39 37···3 1(21个)
·
·
·
当z=15时,x可以为5 3 1(3个)
当z=16时,x可以为2 0(2个)

因此,按照规律,本题目组合总数为50以内的偶数+47以内的奇数+44以内的偶数+···+5以内的奇数+2以内的偶数
某个偶数m以内的偶数个数(包括0)可以表示为m/2+1=(m+2)/2
某个奇数m以内的奇数个数也可以表示为(m+2)/2

所以,求总的组合次数可以编程为:
number=0;
for (int m=0;m<=50;m+=3)
{
number+=(m+2)/2;
}
cout<<number<<endl;

是不是可以看出规律了呢?实际上就是看表达式(这里是3*z=50-x-2*y),就是把最大乘数(这里是3)放在一边,这也是m增加的步长。而m的最大取值也就是表达式中的这个常数。

1分2分5分的硬币,组成1角,共有多少种组合相关推荐

  1. 1分2分5分的硬币,组成1角,共有多少种组合。

    /* 1分2分5分的硬币,组成1角,共有多少种组合. */ #include <iostream> using namespace std; int solve(int total); i ...

  2. 【算法】1分2分5分的硬币,组成1角,共有多少种组合

    1*x + 2*y + 5*z = 10 解法一:暴力枚举法 void main(){int n = 0;// 5分硬币最多有i个for (int i=0; i<3; i++){// 2分硬币最 ...

  3. 有 20 枚硬币,可能包括 4 种类型:1 元、5 角、1 角和 5 分。已知 20 枚硬币的总价值为 10 元,求各种硬币的数量。

    有以下问题 有 20 枚硬币,可能包括 4 种类型:1 元.5 角.1 角和 5 分.已知 20 枚硬币的总价值为 10 元,求各种硬币的数量. 首先我们先来分析一下,每种硬币的情况,1 元最多 10 ...

  4. /* * 编程题第四题(20分): 用1元5角钱人名币兑换5分、2分和1分的硬币(每一种都要有)共一百枚,问共有几种兑换方案?并输出每种方案。 */

    题目: /* 编程题第四题(20分): 用1元5角钱人名币兑换5分.2分和1分的硬币(每一种都要有)共一百枚,问共有几种兑换方案?并输出每种方案. */ 我使用java做的 public class ...

  5. c语言19之用1元5角钱人名币兑换5分、2分和1分的硬币(每一种都要有)共一百枚,问共有几种兑换方案?并输出每种方案

    题目: 用1元5角钱人名币兑换5分.2分和1分的硬币(每一种都要有)共一百枚, 问共有几种兑换方案?并输出每种方案. 源代码: #include<stdio.h> int main() { ...

  6. 用1元5角钱人名币兑换5分、2分和1分的硬币(每一种都要有)共一百枚,问共有几种兑换方案?并输出每种方案。

    用1元5角钱人名币兑换5分.2分和1分的硬币(每一种都要有)共一百枚,问共有几种兑换方案?并输出每种方案. #include<stdio.h> int main(){int sum=150 ...

  7. 整钱换零钱问题。把1元换成1分、2分、5分的硬币,共有多少种不同的换法(C语言)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 题目: [实验体验] 1.整钱换零钱问题.把1元换成1分.2分.5分的硬币,共有多少种不同的换法. 提示:设5分币个数为i(0-20) ...

  8. 创新工场笔试题----有1分,2分,5分,10分四种硬币,每种硬币数量无限,给定n分钱,求有多少种组合可以组合成n分钱?

    [题目]有1分,2分,5分,10分四种硬币,每种硬币数量无限,给定n分钱,求有多少种组合可以组合成n分钱? 代码如下 void Combination(int *a,int index,int n,v ...

  9. 找假币问题-2分法 VS 3分法

    分治算法-找假币问题-2分法VS3分法 找假币问题-2分法 VS 3分法 问题:有k枚硬币,其中有一枚假币,假币与真币无外观差异,只是假币的重量稍微大一些.现有一个无砝码称重天平,通过称重的方式找出假 ...

最新文章

  1. CSS中一些语法规范和代码风格
  2. 为.NET部署应用程序添加个卸载程序
  3. 【Linux】19.Linux环境变量名LD_LIBRARY_PATH 和 ldd命令详解
  4. 编写DLL所学所思(1)——导出函数
  5. pycharm变量存_pycharm不为人知的功能们
  6. 直博清华!陕西女学霸:从农村走出,3次斩获国奖,还被央视采访
  7. IONIC打包安卓遇到COM.ANDROID.SUPPORT:SUPPORT-V4错误的解决办法
  8. 【CentOS】又是一篇Shell
  9. 全网最全详解Windows CMD命令大全
  10. Kepware配置OPC UA实现匿名or用户名/密码连接
  11. WIFI计量插座之计量芯片选型
  12. 基于深度学习安卓端烟雾和火焰检测开发总结
  13. Android中什么是Dex文件
  14. springboot整合quartz定时任务
  15. 车载以太网和工业以太网区别
  16. Ubuntu各版本代号
  17. 西游降魔之东去的西游
  18. 使用putty连接并上传和下载文件到linux服务器
  19. 安装oh my zsh
  20. 基于STM32的智能篮球测温记分记时系统

热门文章

  1. 弘辽科技:淘宝搜索流量是什么意思?
  2. 合肥对口计算机,2021年合肥市对口考试要做哪些题目?计算机应用基础(Windows7+office2010)周测月考单元卷...
  3. MySQL安装包下载地址
  4. 7-5 统计英文字母和数字字符 (10 分)
  5. 5G工业网关的科技治超应用 超限超重超速非现场联合执法
  6. 今年是 Vue 的天下吗?答案显而易见
  7. plc secs通讯协议_SECS/GEM解决方案:PLC与MES间的通讯
  8. 肺结节检测的一些要点总结
  9. python计算学生年龄_用pandas快速统计学生年龄班级等分组信息
  10. E - Kth Takoyaki Set(abc297)