有10元,5元,2元,1元四种面值的人民币,问组成100元钱有多少种组合?
来源:互联网 发布:linux每个文件夹占用 编辑:程序博客网 时间:2024/04/28 02:32
有10元,5元,2元,1元四种面值的人民币,问组成100元钱有多少种组合?
问题分析: 为了表达清楚,用 TEN , FIVE , TWO , ONE , 表示 10元,5元,2元,1元的人民币。
可知 :
0 <= TEN <= 10
0 <= FIVE<= 10
0 <= TWO <= 10
0 <= ONE <= 10
TEN * 10 + FIVE * 5 + TWO * 2 + ONE = 100
有了这些表达式,可以利用穷举法编程,如下:
#include <stdio.h>
int main()
{
int i;
int one;
int two;
int five;
int ten;
int count = 0;
int cou = 0;
for(ten = 0; ten <= 10; ten++)
{
for(five = 0; five <= 20; five++)
{
for(two = 0; two <= 50; two++)
{
for(one = 0; one <= 100; one++)
{
cou++;
if(ten * 10 + five * 5+ two * 2 + one == 100)
{
count++;
}
}
}
}
}
printf("一共循环了%d次\n",cou);
printf("共有%d组合\n",count);
}
运行结果:
这种算法需要的循环次数为 11 * 21 * 51 * 101 = 1189887 。
因为当 10元,5元,2元的张数确定后,一元的个数也就能确定了,
ONE = 100 - 10 * TEN - 5 * FIVE - 2 * TWO;
这样可以省去最里面的循环,减少计算机运算次数。
优化程序如下:
#include <stdio.h>
int main()
{
int i;
int one;
int two;
int five;
int ten;
int count = 0;
int cou = 0;
for(ten = 0; ten <= 10; ten++)
{
for(five = 0; five <= 20; five++)
{
for(two = 0; two <= 50; two++)
{
cou++;
cou++;
one = 100 - (ten * 10 + five * 5 + two * 2);
if((one >= 0) && (ten * 10 + five * 5+ two * 2 + one == 100))
{
count++;
}
}
}
}
printf("一共循环了%d次\n",cou);
printf("共有%d组合\n",count);
}
运行结果:
这样循环次数就减少为 11781 次了。
1 0
- 有10元,5元,2元,1元四种面值的人民币,问组成100元钱有多少种组合?
- 有100枚硬币,总面值是247元,这些硬币的面值有三种:1元,2元 ,5元,编程输出硬币的组合有多少种?
- 有1元、5元、10元、20元、50元、100元硬币无数个,问100000元的组合方法有多少个
- 用1元,2元,5元,10元,20元和50元的纸币组成100元,共有多少种情况
- 用1元,2元,5元,10元,20元和50元的纸币组成100元,共有多少种情况
- 用1元,2元,5元,10元,20元,50元和10元的纸币组成200元,共有多少种情况
- 有人想将手中一张面值100元的人民币换成5元,1元,0.5元面值的零钱100张,以上三种面值的零钱至少有一张,总共有几种换法。
- 用100元人民币兑换10元,5元,1元的纸币(每种都要有)共50张,计算有多少种兑换方案
- 编程实现 1元,2元,5元,100元纸币组成800元,共有多少种情况。?
- 将56元转换为1元,2元,5元,10元,20元有多少种方法?
- 将一张面值100元的人民币换成5元、1元、0.5元的100张的零钞,要求每种零钞不少于1张,问有哪几种组合。
- 如果每个老师的工资额都知道,最少需要准备多少张人民币,才能在给每位老师发工资的时候都不用老师找零呢? 这里假设老师的工资都是正整数,单位元,人民币一共有100元、50元、10元、5元、2元和1元六种。
- 用1元,2元,5元,10元,20元,50元组合成100元
- 计算出N元人民币兑换成1元,2元和5元纸币的所有组合
- 深入解析之将100元兑换为1元、5元、10元的零钱,请问有多少种兑换方法
- C++作业01_02:100元钱,由2元、1元、5角三种面额组成,且一共有100张,试打印出各种组合
- 动态规划:如果我们有面值为1元、3元和5元的硬币若干枚,如何用最少的硬币凑够11元?
- /*C语言编程:某人想将手中一张面值100元的人民币换成5元(可单换20张)、1元(可单换100张)和0.5元(可单换200张)面值的票子,但要求100元换以上的零钱共100张,且要求每种不少于1张,
- HDOJ 2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活(多重背包)
- 什么是动态DNS(DDNS)?
- gradle的相关版本及常见错误问题
- C++的运算符及运算符的重载
- C语言中restrict关键字学习
- 有10元,5元,2元,1元四种面值的人民币,问组成100元钱有多少种组合?
- Golang部份特性的C++对比实现
- 几种常用的设计模式介绍
- 这也许是,全球第一篇VR游戏的深度性能测评报告
- CI框架多个mysql数据库进行切换的思路
- java线程详解
- 在线批量部署网站代码和数据库版本更新升级
- Qt creator5.7 OpenCV249之图片旋转(含源码下载)
- 与SAP集成的接口方式比较:IDOC BAPI RFC 之间的区别