算法设计与分析:第二章 递归 2.2买商品
2015-08-04 01:10
211 查看
/* 一个顾客买了价值为x元的商品:并将y元的钱教给售货员。售货员希望用张数 最少的钱币找给顾客。找的钱最多需要以下6种币值:50,20,10,5,2,1 这道题目的关键在于: 设定一个数组b[6] = {50,20,10,5,2,1} 采用累除法,依次从数组b的高位到低位进行累加,如果当前钱币的值除了之后 有剩余,那么累加找钱币的个数,更新剩余需要找的钱,用下一个币值重复上述过程 输入: 1(买东西的钱) 100(付给的钱) 输出: 6 【1(50) + 2(20) + + 1(5)+ 2(2) = 6】 */ #include <stdio.h> int leastNumOfBackMoney(int iNeedBackMoney,int* pMoneyTypeArr,int iMoneyTypeNum) { if(iNeedBackMoney <= 0) { return -1; } int iRet = 0; for(int i = 0 ; i < iMoneyTypeNum; i++) { int iNum = iNeedBackMoney / pMoneyTypeArr[i]; iNeedBackMoney -= iNum * pMoneyTypeArr[i]; iRet += iNum; if(iNeedBackMoney == 0) { break; } } return iRet; } void process() { int iCost,iPay; int iMoneyTypeNum = 6; int iMoneyTypeArr[6] = {50,20,10,5,2,1}; while(EOF != scanf("%d %d",&iCost,&iPay)) { if(iCost > iPay) { break; } int iNeedBack = iPay - iCost; printf("%d\n",leastNumOfBackMoney(iNeedBack,iMoneyTypeArr,iMoneyTypeNum)); } } int main(int argc,char* argv[]) { process(); getchar(); return 0; }
相关文章推荐
- 看《模拟游戏》有感
- 单点CURL
- 算法设计与分析:第二章 递归 2.1计数排序之统计数对
- 算法设计与分析:第一张 算法分析介绍 1.3逻辑推理之谁能预测分数
- HDU 4358 Boring counting dfs序+莫队算法
- 算法设计与分析:第一张 算法分析介绍 1.2逻辑推理之警察抓小偷
- 1163: [Baltic2008]Mafia
- c++编译链接
- 算法设计与分析: 第一章 算法分析介绍 1.1求任意三个已知数的最小公倍数
- 网站流量的统计中的IP、PV、UV
- Swift对象存储API概述
- 判断单链表是否有环
- Leetcode #90 Subsets II
- 编程之美:第四章 数字之趣 4.10_2数字哑谜和回文
- for循环 break
- 第一个Struts2应用
- Spring Boot 让 MyBatis 打印日志的方法
- 编程之美:第四章 数字之趣 4.11扫雷游戏的概率
- 父类析构函数写成虚函数防止隐蔽的内存泄露问题
- 编程之美:第四章 数字之趣 4.10数字哑谜和回文