Sicily.找零总数
2015-12-30 00:49
225 查看
Sicily.找零总数
Description
小李是超市的收银员,每当顾客来结账时,他们给的钱往往都多余他们所购物品的实际价格,这时,小李就需要找零给他们。小李是一个很爱思考的人,他想知道在目前的纸币面额情况下(1角、5角、1元、5元、10元、20元、50元、100元),如果每种面额的纸币的数量都是无限的,他要给一个顾客找零N(0 < N < 100)元有多少种方式(如0.5元有两种方式:5个1角和1个5角)。小李很苦恼这个问题,聪明的你能帮助他吗?Input
输入包括多组测试用例,通过EOF结束。每组测试用例包括一行,为一个数N (1< N < 100),N为最多包含一位小数的实数。
Output
对于每组测试用例,输出一行,为一个整数,表示找零的方法总数。Time Limit: 1sec Memory Limit:256MB
以下是智能暴力枚举法:
结果居然能过,但是不推荐!
这里暴力枚举的思路是八层循环,由外至里循环依次增多,使得所有面值的纸币的线性组合刚好是给定的金额。智能化思路:
如果所有纸币线性组合的金额超过的给定的金额,直接continue;如果只用1角钱,所需的数量是x个,那么之后的解的1角钱的数量必定是 x%5 + 5*k 的形式(k = 0,1,2….)
#include <stdio.h> #include <math.h> int t = 0; // 所谓的x%5 后的结果 int s = 1; int main(){ double money; int counter; int j1, j5, y1, y5, y10, y20, y50, y100;// 分别为1角,5角,1元,5元,10元,20元,50元, 100元 while( scanf("%lf", &money) != EOF){ counter = 0; for(y100 = 0; y100 <= 1; y100++){// 可怕的八重循环 if( 100.0*y100 - money > 0.00000001)continue; for(y50 = 0; y50 <= 2; y50++){ if(100.0*y100+50.0*y50 - money > 0.00000001)continue; for(y20 = 0; y20 <= 5; y20++){ if(100.0*y100+50.0*y50+20.0*y20 - money > 0.00000001)continue; for(y10 = 0; y10 <= 10; y10++){ if(100.0*y100+50.0*y50+20.0*y20+10.0*y10 - money > 0.00000001)continue; for(y5 = 0; y5 <= 20; y5++){ if(100.0*y100+50.0*y50+20.0*y20+10.0*y10+5.0*y5 - money > 0.00000001)continue; for(y1 = 0; y1 <= 100; y1++){ if(100.0*y100+50.0*y50+20.0*y20+10.0*y10+5.0*y5+1.0*y1 - money > 0.00000001)continue; for(j5 = 0; j5 <= 200; j5++){ if(100.0*y100+50.0*y50+20.0*y20+10.0*y10+5.0*y5+1.0*y1+0.5*j5 - money > 0.00000001)continue; for(j1 = t; j1 <= 1000;j1+=s){ if(100.0*y100+50.0*y50+20.0*y20+10.0*y10+5.0*y5+1.0*y1+0.5*j5+0.1*j1 - money > 0.00000001)continue; if(fabs(100.0*y100+50.0*y50+20.0*y20+10.0*y10+5.0*y5+1.0*y1+0.5*j5+0.1*j1 - money) < 0.00000001){ counter++; t = j1 % 5; //注意 s = 5; } } } } } } } } } printf("%d\n",counter); t = 0;// 再初始化 方便下一个样例 s = 1; } return 0; }
动态规划算法:
等待更新ing相关文章推荐
- 冲动是魔鬼吗?
- artDialogV6 关闭弹窗
- Maven依赖机制
- Hibernate中BookClassId作为外键,Book.jsp访问BookClassName
- 算法之绪论
- 文科生也能看懂的iptables教程(转载)
- Android获取View的宽高与View.measure详解
- Vector和Stack分析
- 【C++ STL应用与实现】19: 迭代器特性-iterator traits
- MongoDB学习笔记六:进阶指南
- Mongodb 笔记02 创建、更新和删除文档
- 原 JS监听回车事件
- [看书日记20151230]属性动画, 插值器,估值器,属性动画的监听
- 博客的客户端
- Kinect虎头蛇尾 微软如何避免HoloLens重蹈覆辙 别搞Kinect了 转移ARVR把
- 对于PCA人脸识别过程的理解
- Delphi 的动态数组
- [LeetCode] 147. Insertion Sort List 解题思路
- 微软 Hololens 技术解谜(上):如何还原三维场景
- 推荐一个学习golang的地址