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语言---找零问题------程序优化相关推荐

  1. 【C/C++】用C语言编写爬虫—爬虫程序优化要点

    写一个网络爬虫 用C语言来写一个网络爬虫,来获取一个网站上感兴趣的信息,抓取自己需要的一切. #include<cspider/spider.h>/* 自定义的解析函数,d为获取到的htm ...

  2. 实现超市收银找零的简单程序

    初学c语言程序与设计的第一个课堂作业 实现简单的"收银","找零"程序 帮助快速理解c语言初期的代码理解问题 建议再自己动手的情况下多练习,熟悉代码编辑的逻辑 ...

  3. C语言入门1——找零计算器(if语句)

    挖一个新坑,上了两年学,学校没有教C,周围人又都会,只能靠自学咯- - 争取每周一篇,要不感觉又会半途而废啊,害 找零计算器 题目要求 输入一个应付金额,再输入一个实付金额,如果钱够,就计算应找多少钱 ...

  4. 《C语言编程——零基础初学者指南(第3版)》一第1章 什么是C程序设计1.1 什么是程序...

    本节书摘来自异步社区<C语言编程--零基础初学者指南(第3版)>一书中的第1章,第1.1节,作者 [美]Greg Perry , Dean Miller,更多章节内容可以访问云栖社区&qu ...

  5. C语言游戏: 俄罗斯方块(Tetris)@兼谈程序优化方法 [源码+exe下载]

    消除重复:如何将程序逻辑与数据分开? ----俄罗斯方块(Tetris)@兼谈程序优化方法 背景提示: 1,数据,是程序设计的根本.因为任何程序都可以看作是一组数据,和作用于其上的一组操作,这也是面向 ...

  6. c语言输入三个商品的价格,若有一个大于100元或者总价大于200元,全部商品打9折,并完成付款和找零

    输入三个商品的价格,若有一个大于100元或者总价大于200元,全部商品打9折,并完成付款和找零 #include <stdio.h> int main() { int a=0;  int ...

  7. 简单介绍三个C语言图形库C语言其实最擅长的是写纯数据处理的程序 . 非得用C语言写个界面程序那将会变得很困难 . 我刚开始学C语言就是从hello world 开始的 , 后来慢慢开始学从三个数中找

    C语言其实最擅长的是写纯数据处理的程序 . 非得用C语言写个界面程序那将会变得很困难 . 我刚开始学C语言就是从hello world 开始的 , 后来慢慢开始学从三个数中找出最大值 , 和对数组进行 ...

  8. 利用C语言,编写一程序:从键盘输入10个整数,统计其中正数、负数和零的个数,并在屏幕上输出

    利用C语言,编写一程序:从键盘输入多个整数,统计其中正数.负数和零的个数,并在屏幕上输出 //从键盘输入10个整数,统计其中正数.负数和零的个数,并在屏幕上输出 #include <stdio. ...

  9. 单片机c语言除法运算,针对小容量单片机程序优化方式--乘除法篇

    原标题:针对小容量单片机程序优化方式--乘除法篇 目前单片机的市场竞争很激烈,许多应用出于性价比的考虑,选择使用程序存储空间较小(如1K,2K)的小资源8位MCU芯片进行开发.一般情况下,这类MCU没 ...

最新文章

  1. Metasploit(一)--Meterpreter的命令速查表
  2. ML之SVM(三种):基于三种SVM(linearSVR、polySVR、RBFSVR)对Boston(波士顿房价)数据集(506,13+1)进行价格回归预测并对比各自性能
  3. 简述Hadoop和Spark的异同
  4. matlab转向梯形优化设计,转向梯形优化设计matlab程序.doc
  5. 集成测试还原数据库_项目学生:分片集成测试数据
  6. 一场改变你投资生涯的讨论:职业德州扑克手看交易
  7. Numpy根据某一列进行排序
  8. Spark读Hive分区表报错:Caused by: org.apache.hadoop.mapred.InvalidInputException: Input path does not exist
  9. 数组/指针,字符数组/字符串/指向字符的指针
  10. 禁止php读取目录文件目录,Php读取目录文件
  11. IT项目建议书及可行性研究报告撰写格式
  12. 简单的C语言代码实现快速排序
  13. 联想微型计算机改win7,联想win10改win7如何实现?联想电脑Win10改Win7方法详解
  14. matlab相关性分析(皮尔逊,肯德尔,斯皮尔曼)
  15. mysql之事务 锁(三)
  16. Python大法之告别脚本小子系列—信息资产收集类脚本编写(下)
  17. 成就系统工程师的职业生涯
  18. 汇编 第十章 call和ret指令
  19. 云锁 php一句话,关于php一句话免杀的分析转载
  20. 武汉理工实验3 循环结构(1)——7-3 最大公约数和最小公倍数

热门文章

  1. 公司股权分配的七大简明实操建议
  2. zcu104 AXI DMA速度测试总结
  3. openFrameworks实现的简单捕鱼游戏
  4. 关于运算放大器电流流向的问题
  5. 写首小诗表达我的孤独,独自一个人熬着那些只属于我一个人的夜
  6. 传销——从数学游戏到经济邪教
  7. 假如让我来设计“腾讯视频”的推荐系统
  8. linux系统日志及其管理
  9. 【vue开发基础】之使用阿里巴巴矢量图标库
  10. Ubuntu16.04编译roc-rk3328-cc