版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、计划类别 项目编号 项目技术报告课题名称 项目主持人 承担单位 题目:“百钱买百鸡”问题的C语言算法分析C语言是使用时间最久和最普及的计算机高级程序设计语言之一,属于面向过程的程序设计语言,兼有汇编语言和高级语言的双重特点,是人们学习计算机程序设计的首选语言,也是学习其他计算机课程和进行软件开发的基础。C语言程序设计中的循环语句是C语言的一个难点,可以用来解决许多具有规律性重复操作的实际问题,文章通过对“百钱买百鸡”这个问题的算法进行设计、分析和优化,以寻求解决问题的最优算法。关键词:C语言;循环语句;百钱买百鸡Abstract:As a process-oriented programmin
2、g language,C programming language is one of the most classic and popular computer programming languages with the characteristics of the assembly language and the high-level language.It is not only the first choice for the people who begin to learn computer programming,but also the basis for other co
3、mputer courses and software development.As a difficult point in C Programming Language learning,the loop statement can be used to solve many practical problems of regularly repetitive operation.Taking the case of spending 100 dollars on 100 chickens,the paper implements design,analysis and optimizat
4、ion,and finally proposes the optimal algorithm.Keywords:C programming language;loop statement;spending 100 dollars on 100 chickens1 引言(Introduction)计算机算法设计是计算机专业学习的核心专业内容,算法设计对于培养一个人的逻辑思维能力具有重要的作用,能进行有效的算法设计是对一个计算机学者的基本要求。求解同一个问题的算法可能有多种,进行算法设计的优劣往往在一定程度上体现出设计者的计算机应用能力,所以,我们要学会如何对一个算法进行分析并进行优化1,2。一个
5、算法不一定能说它是最优的,我们所说的最优算法是指在某一种衡量标准下,优于解决该问题的所有可能的算法。一般地,解决某个问题的最优算法是指在时间复杂度的基础上的最优性,时间复杂度是指算法执行的时间长短,通过把算法的核心操作执行的次数作为算法的时间度量3,这里,我们使用C语言的循环语句解决“百钱买百鸡问题”,基于算法中的循环次数来判断算法的优劣4,5。2 C语言循环语句(C language loop statement)C语言是一种广泛使用的程序设计语言,它具有功能丰富、使用灵活、目标程序效率高等特点6。C语言是用流程控制语句来控制程序的执行流程,流程控制语句包括顺序结构、选择结构和循环结构三类,
6、C语言中的循环语句又包括for循环语句、while循环语句和dowhile循环语句三种,用它们可以解决实际应用中需要重复处理和计算的问题7,8。例如,计算1到100之间的整数的和,就需要重复地做加法;求数组中的最大值,需要重复地进行两个数据的比较;求素数问题,需要依次对每个整数进行判断;求百钱买百鸡问题,需要依次穷举每个可能的值通过计算来进行判断;求水仙花问题,需要对范围内的整数依次进行计算判断等等。对于这些复杂的问题,使用循环语句来解决效率很高,下面我们通过“百钱买百鸡”这个经典问题来进行分析。3 “百钱买百鸡”问题描述(The problem descriptionof spending
7、100 dollars on 100 chickens)中国古代数学家张丘建在他的算经中提出了著名的“百钱买百鸡问题”:鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问翁、母、雏各几何?这是一个古典数学问题,买一只公鸡值5钱,一只母鸡值3钱,三只小鸡值1钱,问如果用100钱买100只鸡,那么公鸡、母鸡和小鸡分别多少只?我们假设公鸡、母鸡和小鸡的个数分别为a、b、c,那么买公鸡的钱数为5*a,买母鸡的钱数为3*b,买小鸡的钱数为c/3;并且a、b、c之和为100,a,b,c都是正整数且c是3的倍数,该問题用数学中的三元一次方程组表达如下:4 算法设计与分析(Algorithm de
8、sign and analysis)对于上述列出的三元一次方程,最直观的方法就是采用三重循环来解决,我们对a、b、c的范围进行限定,用for循环语句进行算法设计,得出算法一如下:该算法直接将三元一次方程转化为C语言三重循环程序,没有进一步考虑a、b、c更小的取值范围,所以导致循环次数为100*100*100=106,算法的复杂度太高,所以我们可以根据每种鸡的价钱先确定a、b、c的取值范围:公鸡为5钱,所以a的取值范围为120,当然a的取值的不可能是20,否则100钱刚好买20只公鸡与百鸡的题意不符;b的取值范围为133,c的取值范围为399;得到算法二如下: 对于这个算法我们可以计算一下它的循
9、环次数为19*33*97=60819次,可见算法的效率还是不高。那么我们还能不能再进行一定的改进呢?通过分析,买小鸡的钱数为c/3,那么小鸡的数量c是3的倍数,所以为了提高执行效率,我们可以把对小鸡的for循环语句中c的步长值设为3,这样可以减少一定的循环次数,也可以去掉c%3=0這个约束条件,得到算法三如下:此时我们再来计算一下以上算法需要执行的循环次数为19*33*33=20691次,很明显,此时算法的执行效率有了一定的提高,缩小小鸡c的取值范围使得算法的循环次数变为上个算法的三分之一。那么这一次改进后的算法就是最理想的算法吗?还有没有进一步改进的空间呢?答案是肯定的。其实只要我们再仔细观
10、察可以发现,这个算法实际上可以不用三重循环,而只用二重循环就可以达到目的,因为二重循环比三重循环会大大降低循环次数,因而提高执行速度。由于公鸡a和母鸡b的数量确定后,其实小鸡c的数量也就等于确定了,即c=100-a-b,从而就不需要再进行加一重循环了,此时又可以去掉a+b+c=100这个约束条件,得到算法四如下:以上算法的循环次数只有19*33=627次,相对上个算法又大幅度提高了算法的执行效率。我们尝试再进行进一步的分析: 我们可以进一步分析出公鸡、母鸡和小鸡的更小范围,根据一只公鸡5钱,一只母鸡3钱,三只小鸡1钱,得知,若a的值为15时,公鸡的总钱为75钱,剩下的25钱最多可买75只小鸡,
11、达不到百鸡数量的要求,所以公鸡a的值必定小于15,a的大致范围是114;若b的值为25时,母鸡的总钱为75钱,剩下的25钱最多可买75只小鸡,刚好达到百鸡的数量,所以b的值不会超过25,b的大致取值范围为125;由于a、b的最大值分别为14和25,那么要满足百鸡数量的话,c的最小值至少应是61,又当c的值为90只时,小鸡的总钱才30钱,剩下10只即使都买公鸡也只50钱,总钱达不到百钱的要求,所以c的值肯定是小于90,又c是3的倍数,所以大致估算c的取值范围为6387。既然a、b、c的大致范围都确定了,我们可以得到下列算法五:根据对算法五的三种情况进行对比可以发现,情况一的执行次数为126,情况
12、二的执行次数为25*9=225,情况三的执行次数为14*25=350,显然选择取值范围小的两个变量作为循环变量来构造二重循环是比较合理的,当然这三种情况的算法执行效率都要优于前面的算法。5 结论(Conclusion)以上五个算法是应用多重循环语句对“百钱买百鸡”问题的算法分析,由差到优循序渐进地对算法进行了改进,通过每一次的改进降低了算法的执行时间,从最初的106次的循环执行次数降到了最后的126次,最终得到了最为理想的算法。所以,我们在进行算法设计时,不应该只是得出了正确的算法就可以了,而是要尽量去寻找最优的算法,要具有不断地对已有算法设计进行改进和优化的精神。当然,该问题的解决方法不止于
13、此,必定还会有一些更优的算法值得我们去探索。参考文献(References)1 Fathima H.,Musthafa A.Syed.Optimization Based Routing AlgorithmsJ.International Journal of Applied Research on Information Technology and Computing,2014,5(1):55-70.2 Guang-Yu Zhu,Wei-BoZhang.Optimal Foraging Algorithm for Global OptimizationJ.Applied Soft Computing,2017,51:294-313.3 R.VenkataRao,G.G.Waghmare.A New Optimization Algorithm for Solving Complex Constrained Design Optimization ProblemsJ.Engineering Optimization,2017,49(1):60-83.4 黄隆华,陈志辉.算
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 物流仓库经理年度述职报告
- 智慧教室装修方案
- 从业人员安全生产教育培训
- 孕期糖尿病饮食和护理
- 老年人糖尿病病人的护理
- 龋齿病的发展过程图解
- 2.3.1物质的量的单位-摩尔 课件高一上学期化学人教版(2019)必修第一册
- 吉林省2024七年级数学上册第1章有理数1.10有理数的除法课件新版华东师大版
- 吉林省2024七年级数学上册第1章有理数全章整合与提升课件新版华东师大版
- 深度学习及自动驾驶应用 课件 第9、10章 生成对抗网络及自动驾驶应用、强化学习理论及自动驾驶应用实践
- 人教新课标四年级上册数学《06用“五入”法求商》说课稿
- 人教版二年级数学上册第六单元《表内乘法(二)》说课稿(含14课时)
- CJT 482-2015 城市轨道交通桥梁球型钢支座
- 我国不锈钢管行业现状分析
- 2024年关于印发全国社会心理服务体系建设试点5篇
- 维修水池合同协议书
- 2024年中级经济师考试题库含答案(完整版)
- 高效餐饮服务承诺
- 2024年05月浙江嘉兴职业技术学院海盐学院招考聘用高层次紧缺人才45人笔试历年高频考点(难、易错点)附带答案详解
- 精准医疗与个体化治疗
- 职业技术学院计算机应用技术专业教学标准
评论
0/150
提交评论