- 1、本文档共28页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C语言编程算法
经典算法 阶乘尾数零的个数,100!的尾数有多少个零? *问题分析与算法设计 可以设想:先求出100!的值,然后数一下末尾有多少个零。事实上,与上题一样,由于计算机所能表示的整数范围有限,这是不可能的。 阶乘尾数零的个数,100!的尾数有多少个零? 为了解决这个问题,必须首先从数学上分析在100!结果值的末尾产生零的条件。不难看出:一个整数若含有一个因子5,则必然会在求100!时产生一个零。因此问题转化为求1到100这100个整数中包含了多少个因子5。若整数N能被25整除,则N包含2个因子5;若整数N能被5整除,则N包含1个因子5。 *程序说明与注释 #includestdio.h int main() { int a,count =0; for(a=5;a=100;a+=5) //循环从5开始,以5的倍数为步长,考察整数 { ++count; //若为5的倍数,计数器加1 if(!(a%25)) ++count; //若为25的倍数,计数器再加1 } printf(The number of 0 in the end of 100! is: %d.\n,count); //打印结果 return 0; } *运行结果 The number of 0 in the end of 100! is: 24. *问题进一步讨论 本题的求解程序是正确的,但是存在明显的缺点。程序中判断整数N包含多少个因子5的方法是与程序中的100有关的,若题目中的100改为1000,则就要修改程序中求因子5的数目的算法了。 *思考题 修改程序中求因子5的数目的算法,使程序可以求出任意N!的末尾有多少个零。 捕鱼和分鱼 A、B、C、D、E五个人在某天夜里合伙去捕鱼,到第二天凌晨时都疲惫不堪,于是各自找地方睡觉。日上三杆,A第一个醒来,他将鱼分为五份,把多余的一条鱼扔掉,拿走自己的一份。B第二个醒来,也将鱼分为五份,把多余的一条鱼扔掉,保持走自己的一份。C、D、E依次醒来,也按同样的方法拿走鱼。问他们合伙至少捕了多少条鱼? *问题分析与算法设计 根据题意,总计将所有的鱼进行了五次平均分配,每次分配时的策略是相同的,即扔掉一条鱼后剩下的鱼正好分成五份,然后拿走自己的一份,余下其它的四份。 假定鱼的总数为X,则X可以按照题目的要求进行五次分配:X-1后可被5整除,余下的鱼为4*(X-1)、5。若X满足上述要求,则X就是题目的解。 *程序说明与注释 #includestdio.h int main() { int n,i,x,flag=1; /*flag:控制标记*/ for(n=6;flag;n++) /*采用试探的方法。令试探值n逐步加大*/ { for(x=n,i=1flag;i=5;i++) if((x-1)%5==0) x=4*(x-1)/5; else flag=0; /*若不能分配则置标记falg=0退出分配过程*/ if(flag) break; /*若分配过程正常结束则找到结果退出试探的过程*/ else flag=1; /*否则继续试探下一个数*/ } printf(Total number of fish catched=%d\n,n); /*输出结果*/ } *运行结果 Total number of fish catched = 3121 *问题的进一步讨论 程序采用试探法,试探的初值为6,每次试探的步长为1。这是过分保守的做法。可以在进一步分析题目的基础上修改此值,增大试探的步长值,以减少试探次数。 *思考题 请使用其它的方法求解本题。 换分币 用一元人民币兑换成1分、2分和5分硬币,共有多少种不同的兑换方法。 *问题分析与算法设计 根据题意设i,j,k分别为兑换的1分、2分、5分硬币所具有的钱数(分),则i,j,k的值应满足: i+j+k=100 *程序说明与注释 #includestdio.h int main() { int i,j,k,count=1; printf(There are follwing small exchange plans for 1 Yuan note:\n); for(i=0;i=100;i++) /*i为1分硬币钱数,可取值0,1,2…,100*/ for(j=0;j=100-i;j+=2) /*j为2分硬币钱数,可取0值,2,4,…,100*/ for(k=0;k=100-i-2*j;k+=5) /*k为5分硬币钱数*/ if(i+j+k==100) printf(count%4?%d:1*%d+2*%d+5*%d\t:%d:1*%d+2*%d+5*%d\n,count++,i,j/2,
您可能关注的文档
- C串行口.ppt
- C实现CS模式下软件自动在线升级.docx
- C建筑物垂直度标高全高测量记录.docx
- C普通车床说明书.doc
- C有限差分法.ppt
- C直流调速系统用的可控直流电源.ppt
- C混凝土施工方案.doc
- C窗体及常用控件组件.ppt
- c语言 第章数据的机内表示和存储.ppt
- C语言中最容易犯的几个错误的参考.doc
- 2025届湖南省衡阳市第八中学高三第二次模拟考试化学试卷含解析.doc
- 江苏省淮安市四星级高中2025届高三六校第一次联考生物试卷含解析.doc
- 2025届华东师范大学第二附属中学高考冲刺生物模拟试题含解析.doc
- 厦门市海沧中学2025届高三考前热身历史试卷含解析.doc
- 西藏自治区林芝市第一中学2025届高三第二次模拟考试历史试卷含解析(1).doc
- 江西省遂川中学2025届高三第五次模拟考试生物试卷含解析.doc
- 广西南宁市兴宁区南宁三中2025届高三适应性调研考试生物试题含解析.doc
- 2025届滨海新区高考仿真卷历史试题含解析.doc
- 2025届河南省驻马店市正阳县中学高三下学期联合考试生物试题含解析.doc
- 云贵川高中2025届高考考前模拟化学试题含解析.doc
文档评论(0)