C语言---找零问题------程序优化
C语言----找零问题----程序优化
题目详情:
现有一元,两元,五元面额的纸币若干,给出任意的找零要求,给出每种找零方案,输出循环次数。
优化代码一:
代码优化内容:
利用num/5,num/2来进行判断,减少了找零超额的循 环次数。
同时,利用beak跳出循环,减少了最后的超额循环次数。
优化总结:减少得到答案后的无效循环。-----注意:这里是减少的是找到答案以后的无效循环。
代码二:
# include <stdio.h>
int main (void)
{int num,i,j,k,count=0;//I,J,K,分别表示一元,二元,五元的硬币。scanf("%d",&num);for(k=0;k<=num/5;k++)for(j=0;j<=num/2;j++){i=num-j*2-k*5;count++;if(num==i+5*k+2*j)printf("%d %d %d\n",i,j,k);
}printf("%d",count);
return 0;
}
优化分析:
(1)纸币找零面额先从5开始遍历,这样可以省去如图一的在不合格k,j中i的循环次数。
代码三:增加最小值判断------当我们从5开始遍历后,我们可以知道,每增加一张五元纸币,小面额纸币可以减少更多,我们可以应用一个最小值判断,当以后的循环(最外层循环)的纸币总数大于前面的纸币总的时候,我们可以不用循环了。
话题:(回归到1.2.5的找零问题,图式代码为修改验证思考代码)在这个代码的测试过程中,我们发现了一个有趣的事情,即程序循环的次数与最终的方案数相同,那么,这究竟是怎么一回事呢?
思考与解答:原来是因为在第二层循环中,这位同学更进一步利用了j2<=num-5k直接保证了,i小于零的情况不可能出现。而最小面额是一直接可以对缺少的项进行填充;而当最小面额是二是,就会有奇数带填充而无法填充的情况,使得最后循环次数与方案数不相同。
题外话
在本题最后,这位同学利用6.3.2的面额进行测试,而作者利用7.5.2,进行测试,这时,我们想到了一个问题,就是6.3.2可不可以遍历所有整数。
结果:我们只需要考虑互为质因数的两个找零,6可以删去,因为6可以由三个2代替,那么3使得一个数字成为一个奇数,二使得这个奇数可以成为大于这个奇数的任何奇数。我们只需要考虑最小的可找零奇数,1–不可,3—可以,所以,我们可以知道,这三种面额的纸币可以遍历2及其以上所有整数。
C语言---找零问题------程序优化相关推荐
- 【C/C++】用C语言编写爬虫—爬虫程序优化要点
写一个网络爬虫 用C语言来写一个网络爬虫,来获取一个网站上感兴趣的信息,抓取自己需要的一切. #include<cspider/spider.h>/* 自定义的解析函数,d为获取到的htm ...
- 实现超市收银找零的简单程序
初学c语言程序与设计的第一个课堂作业 实现简单的"收银","找零"程序 帮助快速理解c语言初期的代码理解问题 建议再自己动手的情况下多练习,熟悉代码编辑的逻辑 ...
- C语言入门1——找零计算器(if语句)
挖一个新坑,上了两年学,学校没有教C,周围人又都会,只能靠自学咯- - 争取每周一篇,要不感觉又会半途而废啊,害 找零计算器 题目要求 输入一个应付金额,再输入一个实付金额,如果钱够,就计算应找多少钱 ...
- 《C语言编程——零基础初学者指南(第3版)》一第1章 什么是C程序设计1.1 什么是程序...
本节书摘来自异步社区<C语言编程--零基础初学者指南(第3版)>一书中的第1章,第1.1节,作者 [美]Greg Perry , Dean Miller,更多章节内容可以访问云栖社区&qu ...
- C语言游戏: 俄罗斯方块(Tetris)@兼谈程序优化方法 [源码+exe下载]
消除重复:如何将程序逻辑与数据分开? ----俄罗斯方块(Tetris)@兼谈程序优化方法 背景提示: 1,数据,是程序设计的根本.因为任何程序都可以看作是一组数据,和作用于其上的一组操作,这也是面向 ...
- c语言输入三个商品的价格,若有一个大于100元或者总价大于200元,全部商品打9折,并完成付款和找零
输入三个商品的价格,若有一个大于100元或者总价大于200元,全部商品打9折,并完成付款和找零 #include <stdio.h> int main() { int a=0; int ...
- 简单介绍三个C语言图形库C语言其实最擅长的是写纯数据处理的程序 . 非得用C语言写个界面程序那将会变得很困难 . 我刚开始学C语言就是从hello world 开始的 , 后来慢慢开始学从三个数中找
C语言其实最擅长的是写纯数据处理的程序 . 非得用C语言写个界面程序那将会变得很困难 . 我刚开始学C语言就是从hello world 开始的 , 后来慢慢开始学从三个数中找出最大值 , 和对数组进行 ...
- 利用C语言,编写一程序:从键盘输入10个整数,统计其中正数、负数和零的个数,并在屏幕上输出
利用C语言,编写一程序:从键盘输入多个整数,统计其中正数.负数和零的个数,并在屏幕上输出 //从键盘输入10个整数,统计其中正数.负数和零的个数,并在屏幕上输出 #include <stdio. ...
- 单片机c语言除法运算,针对小容量单片机程序优化方式--乘除法篇
原标题:针对小容量单片机程序优化方式--乘除法篇 目前单片机的市场竞争很激烈,许多应用出于性价比的考虑,选择使用程序存储空间较小(如1K,2K)的小资源8位MCU芯片进行开发.一般情况下,这类MCU没 ...
最新文章
- Metasploit(一)--Meterpreter的命令速查表
- ML之SVM(三种):基于三种SVM(linearSVR、polySVR、RBFSVR)对Boston(波士顿房价)数据集(506,13+1)进行价格回归预测并对比各自性能
- 简述Hadoop和Spark的异同
- matlab转向梯形优化设计,转向梯形优化设计matlab程序.doc
- 集成测试还原数据库_项目学生:分片集成测试数据
- 一场改变你投资生涯的讨论:职业德州扑克手看交易
- Numpy根据某一列进行排序
- Spark读Hive分区表报错:Caused by: org.apache.hadoop.mapred.InvalidInputException: Input path does not exist
- 数组/指针,字符数组/字符串/指向字符的指针
- 禁止php读取目录文件目录,Php读取目录文件
- IT项目建议书及可行性研究报告撰写格式
- 简单的C语言代码实现快速排序
- 联想微型计算机改win7,联想win10改win7如何实现?联想电脑Win10改Win7方法详解
- matlab相关性分析(皮尔逊,肯德尔,斯皮尔曼)
- mysql之事务 锁(三)
- Python大法之告别脚本小子系列—信息资产收集类脚本编写(下)
- 成就系统工程师的职业生涯
- 汇编 第十章 call和ret指令
- 云锁 php一句话,关于php一句话免杀的分析转载
- 武汉理工实验3 循环结构(1)——7-3 最大公约数和最小公倍数