- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
算法设计题选 (一)、算法设计: 一、筛选法 1:求1—100间的所有素数。 分析:用筛选法,先把2—100的数存到一个数组中,然后先把2的所有倍数删除掉(即让此数变为0),再删3的倍数,继续往上就是5的倍数,7的倍数……,最后,剩下的数(即数组中不为0的数)就是素数。 Var n:array[2..100] of integer; I,j,k:integer; Begin For I:=2 to 100 do n[I]:=I; I:=2; Repeat J:=1; Repeat J:=j+1; K:=I*j; if n[k] 0 then N[k]:=0; Until (j+1)*i 100; Repeat i:=i+1; until (n[i] 0) or (i 50); Until i 50; for i:=2 to 100 do if n[i] 0 then write(n[i]:4); end. 另外,该题也可利用集合来做,同样用筛选法: var ss:set of 2..100; i,j,k:integer; begin ss:=[2..100]; for i:=2 to 50 do begin j:=1; repeat j:=j+1; k:=i*j; if k in ss then ss:=ss-[k]; until k+i 100; end; for i:=2 to 100 do if i in ss then write(i:3); end. 集合SS用来存放数 把SS中2至50的倍数全部删除 2:不相同的余数问题,即“秦王暗点兵”或“韩信点兵”: 有一楼房的楼梯级数很奇特,一步跨二级多一级,一步跨三级多二级,如果分用四、五、六、七去除级数分别余三、三、五、五。问这楼房共有多少级阶梯?(已知不超过400级)。 分析:已知级数不超过400级,我们可仿照求素数的方法,把1—400存进一个数组中,然后这些数用2、3、4、5、6、7分别去除,如果余数分别不为1、2、3、3、5、5就删除它,最后,最小的一个没有被删除的数就是解。 Var n:array[1..400] of integer; I,j,k:integer; Const a:array[1..6] of integer=(2,3,4,5,6,7); b:array[1..6] of integer=(1,2,3,3,5,5); Begin For I:=1 to 400 do n[I]:=I; for i:=1 to 6 do begin for k:=1 to 400 do begin if n[k] 0 then begin if k mod a[i] b[i] then begin n[k]:=0; end; end; end; end; i:=0; repeat i:=i+1; until n[i] 0; write(n[i]:4); end. 除数 余数 找最小的一个没有被删除的数 分析:用上述方法由于要删除的数非常多,因此速度较慢,我们可以反过来想,把满足余数条件的数加上记号,最后,最小的一个加上了六个记号的数就是答案。 Var n:array[1..400] of integer; I,j,k:integer; const a:array[1..6] of integer=(2,3,4,5,6,7); b:array[1..6] of integer=(1,2,3,3,5,5); Begin For I:=1 to 400 do n[I]:=0; for k:=1 to 400 do begin for i:=1 to 6 do begin if k mod a[i]=b[i] then n[k]:=n[k]+1; end; end; i:=0; repeat i:=i+1; until n[i]=6; write(i:4); end. 这样,速度要快很多。大家思考一下下题:
您可能关注的文档
最近下载
- 五年级语文作文《“漫画”老师》写作指导.pptx VIP
- 手持式电动工具安全培训.pptx VIP
- 架空输电线路无跨越架不停电跨越架线施工工艺.docx VIP
- 2025年统编版(2024)小学道德与法治二年级上册(全册)教学设计(附目录P84).docx
- 学习科学家精神袁隆平先进事迹心得体会(10篇).docx VIP
- 3500词(带音标)——完整打印版 .pdf VIP
- 3hac18153 3 reve应用手册机器人控制器robotware5.pdf VIP
- 环境影响评估投标方案(技术标).pdf
- 416例晚期妊娠合并贫血治疗分析.doc VIP
- 生物医学传感纳米生物传感器.ppt VIP
文档评论(0)