- 1、本文档共22页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
信息学竞赛辅导初赛之完善程序-高中课件精选.ppt
解题分析 1.回忆一般递归程序的结构 2.常规的用递归式穷举产生序列的算法 3.观察子程序序列产生部分,发现不属于常规的生成算法(因为有数字交换语句),而是先生成一个顺序序列,然后通过不断的交换不同位置上的数字来产生序列。 4.转而结合程序特点来分析算法并及时验证。 * 主程序 begin writeln(Entry n:); read(n); count:=0; for i:=1 to n do a[i]:=i; ⑤ ; end. 由于程序通过递归求解,所以这里必定是语句perm(?) * 子程序第1段 Procedure perm(k:integer); var j,p,t:integer; begin if ① then begin inc(count); for p:=1 to k do write(a[p]:1); write( ); if ( ② ) then writeln; exit; end; 下面循环在输出一个排列,循环终值必定是n,再结合一般递归结束条件,这里必定是n=k 结合试题中count的作用且每行5个输出,所以这里必定是count mod 5=0 * 子程序第2段 for j:=k to n do begin t:=a[k]; a[k]:=a[j]; a[j]:=t; ③ ; t:=a[k]; ④ ; end 按照递归结构,这里是现场恢复语句,所以就是a[k]和a[j]值交换回来。 首先确定是递归调用语句;结合前面n=k递归结束条件以及一般递归参数变化规律,这里填perm(k+1);同时可以初步确定空格5填perm(1)。 * 验证 1.第一个序列产生:首先是a[1]和a[1]交换、a[2]和a[2]交换,然后输出123(假定n=3)。 2.第二个序列产生:递归回来后,首先是a[2]和a[3]交换,然数输出132。 3.第3个序列产生:输出132后,递归返回,a[1]和a[2]交换(一开始的1和2),输出序列213。 …… * 解题关键 1.递归:递归一般程序结构、递归调用的本质。 2.适当的猜想假定,结合全局的系统验证。 * 阅读程序题2 由键盘输入一个奇数 P (P100,000,000),其个位数字不是5,求一个整数 S,使 P×S = 1111...1 ( 在给定的条件下,解 S 必存在)。要求在屏幕上依次输出以下结果: (1)S 的全部数字。除最后一行外,每行输出 50 位数字。 (2) 乘积的数字位数。 例1:输入p=13,由于13*8547=111111,则应输出(1)8547,(2)6 例2:输入p=147,则输出结果应为(1)755857898715041572184429327286470143613 (2)42,即等式的右端有42个1。 * 输入部分代码 while (true) do begin writeln (Input p, the last digit is 1 or 3 or 7 or 9:); readln(p); if (p mod 20)and(p mod 50) then ⑥ ; {如果输入的数符合要求,结束循环 } end; 根据题意,该部分用来输入正确性的判断,输入不正确继续重新输入,否则中断循环。填写break。 * 高中教育精选 高考精选 高中教育精选 高考精选 高中教育精选 高考精选 高中教育精选 高考精选 高中教育精选 高考精选 高中教育精选 高考精选 高中教育精选 高考精选 高中教育精选 高考精选 高中教育精选 高考精选 高中教育精选 高考精选 高中教育精选 高考精选 高中教育精选 高考精选 高中教育精选 高考精选 高中教育精选 高考精选 高中教育精选 高考精选 高中教育精选 高考精选 高中教育精选 高考精选 高中教育精选 高考精选 高中教育精选 高考精选 高中教育精选 高考精选 高中教育精选 高考精选 高中教育精选 高考精选 * 变量方面的填空(定义类型、设定初值、变量赋值等) 循环方面的填空(定义变量、设定循环的初值和终值、在循环中如何引用) 分支转移方面的填空(定义布尔表达式、确定程序的走向) 主程序和子程序关系方面的填空(值参、变参、调用格式) 输入输出方面的填空 * 不含子程序 例一、求元素之和最大的子方阵:在m*n的正整数数字方阵中,找出一个p*q的子阵,使得其元素之和最大。 3 8 4 22 11 1 7 9 5 21 6 2 10 3 8 9 2 7 12 3 5 21 6 10 3 8 2 7 12 * 程序清单 Var a:array[1..20,1..20] of integer
您可能关注的文档
- 人教版地理必修一第一章第三节地球的运动-高中课件精选.ppt
- 人教版小学四年级写景作文指导-高中课件精选.ppt
- 人教版小学数学一年级上册全册课件 (第一单元全部)-准备课-高中课件精选.ppt
- 人教版小学数学二年级上册第一单元练习题-两份-高中课件精选.doc
- 人教版小学语文五年级上册课内阅读及答案-高中课件精选.ppt
- 人教版小学课文文言文阅读练习经典题-高中课件精选.doc
- 人教版美术九年级上册《编结艺术》课件-高中课件精选.ppt
- 人教版英语七上Unit1讲义+习题-高中课件精选.doc
- 人教版高中化学必修1物质的量浓度-高中课件精选.ppt
- 人教版高中化学必修一-氧化还原反应--PPT课件-高中课件精选.ppt
文档评论(0)