NOIP2001T_report_yangbohai【信息技术】.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
杨博海: 第一题:本程序采用全面搜索的方法,找出最精确的三个根。其中x[0]为函数自变量,y[0]为函数值,使abs(y[0])成为极小值的自变量x[0]即为方程的根。x[i] (i0)用于存放根的值。lasty是上一次算出的函数值,当abs(y[0])abs(lasty)时,随着x[0]的增大,abs(y[0])越来越小,只要对y[0]进行跟踪,算出使abs(y[0])最小的x[0]值,再存入x[i],然后再等待下一次的abs(y[0])abs(lasty),并计算出所有的根。程序如下: const nn=3;nm=2; {nn表示方程的最高次项的指数,nm表示计算时精确到小数点后的位数} var da,x,y:array[0..nn] of real; {da[i]:x的i次项系数} b,i,g:integer; j,long,lasty,m,fs,fe:real; a:longint; f:boolean; begin fs:=-100;fe:=100;m:=1/exp(nm*ln(10));f:=false; {fs:根的下限,fe:根的上限} for a:=0 to nn do begin { m:1/10nm ,f:表示y[0]是否正在减小 } read(da[nn-a]); end; for a:=trunc(fs/m)-1 to trunc(fe/m) do begin x[0]:=a*m;y[0]:=0;j:=1; {按顺序产生x[0]} for b:=0 to nn do begin y[0]:=y[0]+da[b]*j; {计算出相应的y[0]} j:=j*x[0]; end; if (abs(y[0])abs(lasty)) and (not f) then begin i:=i+1; f:=true end; if (abs(y[0])abs(lasty)) and f then begin x[i]:=x[0]-m; {将上次的x[0]值存入x[i]} f:=false; if g=nn then a:=trunc(fe/m); {判断是否已经计算出所有的根} end; lasty:=y[0]; end; for a:=1 to nn do writeln(x[a]:0:nm); {输出结果} end. 总结:此程序结构简单,对根的位置没有要求,但由于采用了全面搜索的算法,效率较低,当精度要求很高时,其速度远不及二分法。 第二题: 递归算法: 本程序用递归的方法进行计算,首先建立递推关系式:将一整数num按题意分成k个整数之和的分法个数M满足如下关系:(简写为M(num,k,large),其中large为将num分成k分之后的最大整数,在这里large=num-k+1) 当large=1,num=k时,M(num,k,large)=1。 当large=1,num≠k时,M(num,k,large)=0。 当k=1,num=large时,M(num,k,large)=1。 当k=1,numk时,M(num,k,large)=0。 当k1,large1时,M(num,k,large)=M(num-large,k-1,MAX(num-k-large+2,large))+M(num,k,large-1)。 优化:用递推关系式递归可以进行大幅度优化,而计数法递归却做不到这一点。在本题中当k值较大时(如k5),有些M值被计算上千遍甚至上万遍,如果每个需要计算的M值只需算一遍,那么其速度会成倍提高。建立数组存储是最好的方法,但由于内存有限,本程序只建立了部分M值的数组。尽管如此,优化后程序的效率最大可为原先的960倍(num=200,k=6)。 程序如下: const mn=200;mk=6;ml=110;sk=2; { mn:数组中num的上限,ml:数组中large的上限} opendata=true; {opendata:优化开关(true为打开),mk:数组中k的上限,sk:数组中k的下限} type data=array[1..mk,1..ml] of longint; {建立数组} var n,m:intege

文档评论(0)

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档