- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
ACM 例题讲解汇编
Online Judge例题讲解 南开ACM协会 ?1002: [NKPC1]Lucy的难题 f(n) 当 n的时候,f(n)=n-5;当 的时候,f(n)=f(f(n+2005))。现在请您试试编程解决Lucy的难题! 初步想法:int f(int n){ if( return f(f(n+2005)); return n-5;} ?1002: [NKPC1]Lucy的难题 错误原因:递归层数太多,栈溢出 简单的改进 ----- 递归化为循环 用m表示f的层数,f(m,n)表示参数n嵌套了m层f,例如f(3,n)=f(f(f(n)))f(1,n)=f(n)f(0,n)=n while(1==scanf(%d,n)){ m=1; while(m0){ if(n{ n=n-5;--m; } else{ n+=2005; ++m; } } printf(%d\n,n); } ?1002: [NKPC1]Lucy的难题 进一步改进 设k+2005f(1,k)=f(2,k+2005)=f(1,k+2000)也即f(k)=f(k+2000) 设k+2005*k+2005*(m+1)有f(1,k) =f(1,k+2000) ?1002: [NKPC1]Lucy的难题 当k+2005*(m+1k+2005*(m+2)f(1,k) =f(2,k+2005)=f(2,k+2005+2000*t)=f(1,k+2000*(t+1))进一步可知f(k)=f(k+2000)仍然成立 这样得到一个简单的方法,如果将n累加2000,直到超可,代码略 1263: 粗心的物理学家 计算1+1/2+1/3+…+1/n其中n=5*10^6输入n输出计算结果,保留12位小数 double s;//记录最终计算结果int i,j; 1263: 粗心的物理学家 while(scanf(%d,j)==1){ s=0; for(i=1;i=j;++i) s+=1./i; printf(%.12lf\n,s); } 为什么? 1263: 粗心的物理学家 精度问题 利用C++计算1e10+1e-10并保留12位小数:printf(“%.12lf\n”,1e10+1e-10);结果为10000000000.000000000000 原因是double本身精度有限 如果将上述程序中的循环改为for(i=j;i=1;--i) s+=1./i; 则AC 1023: A+B+C+D+... 的挑战 输入有多行数据,每行有若干整数,这些整数数以空格分割,请分别求出每行整数的和。 Sample Input 100 200 4 45 45 Sample Output 304 90 1023: A+B+C+D+... 的挑战 如果用普通的读入方法读入整数,则无法知道什么时候是一行的结束 有很多处理方法,这里介绍用getchar() getchar()无参数,它读入一个字符,可以是转义字符,返回值为int型,表示ASCII 思考:getchar()返回值为什么不是char? 1023: A+B+C+D+... 的挑战 int sum,a; char ch;//sum为结果,a为当前数 ch=getchar()反复读入字符,有以下几种情况 1,ch=‘0’ ch=‘9’,则a=a*10+ch-’0’; 2,ch==‘\n’,一行读入结束,则输出sum 3,ch==‘ ‘,当前数读入结束,sum+=a;a=0 1023: A+B+C+D+... 的挑战 也可以利用cin.getline函数读入一整行,包括空格,或者gets函数也可以得到相同效果 读入一整行之后,可以同样采取上述方法解题,但如果熟悉strtok函数的话实际上还有更好的做法,留作自学 ?1046: 正整数划分问题 将一个正整数n表示成一系列正整数的和,如:N=n1+n2+…+nk (其中n1≥n2≥…≥nk≥1, k≥1)正整数n的一个这种表示成为正整数n的一个划分。现在给出一个正整数n(80≥n≥1),求n的不同划分一共有多少种。 ?1046: 正整数划分问题 假设n已经划分出一个数字为n1,则n-n1的划分成为一个子问题,因此可以考虑动态规划(Dynamic Programming = DP) 但是n-n1的划分必须满足一个条件:划分出的最大数字不超过n1,因此我们可以设dp[i][
您可能关注的文档
最近下载
- 第一单元-观察物体(单元测试)-2025-2026学年三年级上册数学人教版.docx VIP
- 处理量6万吨日城市生活污水处理厂初步设计.docx
- 后张法预应力钢绞线理论伸长量分段汇总计算实例和应用.doc VIP
- 老年人防骗知识课件下载.pptx VIP
- 3,5-二氯-2,6-二甲基-4-羟基吡啶的生产工艺.pdf VIP
- 个人征信基础数据库系统数据接口规范第三部分数据校验规则V1.0.doc VIP
- 个人征信基础数据库系统数据接口规范第二部分:数据发布格式.doc VIP
- Unit 2 Bridging Cultures 单元整体教学设计高中英语人教版 选择性必修第二册单元整体教学设计.pdf
- 40-50之间离婚协议书.doc VIP
- 清华大学八字班数学分析1期中 于品(1).pdf VIP
文档评论(0)