ImageVerifierCode 换一换
格式:DOCX , 页数:17 ,大小:34KB ,
资源ID:22154470      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/22154470.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(程序填空专练一答案Word文档下载推荐.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

程序填空专练一答案Word文档下载推荐.docx

1、 if aiaj then begin temp:=ai;ai:=aj;aj:=temp end;=2 to maxn do if _ _ then ai:=-ai; tail:current:=1; while _ _ do begin while acurrent0)的数,把它放到当前队尾tail的下一个位置。所以:ai=abs(ai-1)(current=maxn) and (acurrent0)acurrent(atailai-1而ai还要尽可能小;假设现在已求出了a1ai-1,那么为了满足“能组成尽可能多的不同整数”,则ai应该取a1+a2+ai-1+1,这样必然要设一个累加器,再看

2、看程序:)还真是!所以得到:初始化s: 累加s+aj; 赋值,注意多加1:s+1;那么怎么填呢?它表示能组成的不同整数的个数,那为什么要扫描一遍数组呢?感觉也应该是累加!其实我们应该充分发挥上面已填好的程序段,发现:6个数为:1 2 4 8 16 32(哦,难怪说小于33!让我更加坚信上面做的是对的!),很明显是二进制数的问题吗?本质上就是一个求一个6位的二进制数最多能表示多少状态?答案为:20+21+22+23+24+25=1+2+4+8+16+32。不要激动,看题目填什么?累加:t+ai。 3.复杂的问题描述+简单的程序+细心地处理细节问题(1995年高中组3)设有一个实数,以字符串形式存

3、放于数组x中,用x:array1.Nof char表示。其中x1若为-,表示负数;若为+、.或,则表示正数。若为数字,也认为是正数。 例如 x=(,2035%) 则表示203.5 x=(1) 则表示-1.2 约定:在字符串x中,除x1外,其后可以包含有若干个与,但仅以第一次出现的为准,空格不起任何作用,并以字符作为结束标志。将输入的字符串还原成实数输出(小数点后无用的0应除去),还原的结果以下列形式存放(不需要输出)。 F:数符。正数放0,负数放1。 A:array1.N of integer; 存放数字,不放小数点。 K:表示A中有效数字的个数。 J:表示小数点后的位数。数203.24,还原

4、后结果的存放是: F=0 A=(2, 0, 3, 2, 4) K=5 J=2 又如:数-33.0740,还原后结果的存放是: F=1 A=(3, 3, 0, 7, 4) J=3x : array1.10 of char;可放长度定为10;首先读入字符串,然后处理数的符号,在还原的过程中,需要判定整数部分与小数部分,同时去除多余的空格和小数点,并约定输入是正确的,不用作出错检查。 只要程序段: For I := 1 to 10 do aI := 1 to 10 do read(xI); J : f : k : b : If x1 = then begin _; _; End Else if x1

5、 := then I := 2 Else I : While _ do I := I + 1; While _ do BEGIN If (xI) and (xI0 then while ak=0 do begin _ _显然,蓝色的程序段是用来处理实数的符号的,所以根据约定应该是设置负数标记,即f:根据else后面的句子,发现i为循环扫描的指针,所以应该是确定下一位置,即i:=2;很明显是过滤掉空格!所以填:(xi= )and(i10);也很明显,一个大循环,判断字符串是否扫描结束,即:xi%再看看b变量的含义:根据else子句,发现b=1表示整数部分结束!所以是把一个数字字符转换成数字填到数

6、组a中(ak:=ord(xi)-48);填j:=j+1;(j表示小数点后的位数);很明显,是处理有小数、并且有多余的0的情况,所以为:j:=j-1;k:=k-1;小结:注意程序前前后后看,发现变量的作用和含义! 4.典型算法+数据结构(1996年高中组1/初中组3)四色问题:设有下列形状的图形:(N=8),其编号为1,2,N。图形之间的相邻关系用下面的邻接矩阵表示:12345678其中:1相邻,0不相邻。 程序要求 将上面图形的每一个部分涂上红(1),黄(2),蓝(3),绿(4)四种颜色之一,要求相邻的部分有不同颜色。 输入方式:邻接矩阵。 输出方式:区域、颜色。算法描述 用数组R:ARRAY

7、1.N,1.N OF 0.1表示相邻关系,S:ARRAY1.N OF INTEGER 表示颜色。 采用回溯的方法,首先给第一个图形涂上红色(1),然后在下面的图形中依次涂上其他颜色,当有矛盾时回溯解决。 程 序 program exp2(inpuT,output); Const n=8; Var I,j,k: R:Array1.n,1.n of 0.1; S:Array1.n of integer; Begin For I:=1 to n do For j:=1 to n do read(RI,j); readln ;I:=2; while I=n do while (j=4) and (I=

8、n) do while do k: if kI then else begin ;=I+1;=14 then begin =I-1; =1 to n do writeln(I,sI) End. 解答:邻接矩阵+回溯法,步骤略,答案如下: S1:=1; (KI) AND (SK*RI,J)J J:=J+1; SI:=J; J:=SI+1; 5.子程序及参数(1999年初中组)问题描述下面程序的功能是从键盘读取A,B数组的元素,A,B数组均已从小到大排好序(无相同元素),现将A,B合并为数组C,同样要求数组C也是从小到大排好序(有相同元素时只保留一个)。程序中N表示数组A,B的长度,i,j,k分别

9、表示数组A,B,C的取数或存数的指针。程序清单 program excp3; const n=8;m=2*n; type arr1=array1.nof integer; arr2=array1.mof integer; var a,b:arr1;c:arr2;i,j,k:procedure copy(x:var y:var i,j:integer); i:=i+1;yi:=xj;end;begin=1 to n do read(ai);readln;=1 to n do read(bi);_ while_dobj then copy (a,c,k,i) else if bjai then c

10、opy (b,c,k,j) copy(a,c,k,i); _ while_do copy(a,c,k,i); while_do copy(b,c,k,j);=1 to k do write (ci:4); writeln;就本题而言,算法和题目本身对选手很清楚!线性表的归并操作在NOIP中考过多次,不管是用数组来操作还是用链表操作;甚至还有一些题目是它的变形(比如多项式的加法)。本题中的copy过程是关键,好在题目并没有考到过程调用的语句(关键是参数的书写),所以下面只要理解了过程的作用和4个参数的含义,题目就会很容易了。答案: k:=0 (i=n)and (j=n) j:=j+1 i=n j

11、 6.特定的算法(1999年高中组2)问题描述 用生成法求出1,2,r的全排列(r=8) 算法过程 用数组:a:array1.rof integer ;表示排列; 初始化时,aI:=1(I=1,2,.f) 设中间的某一个排列为a1,a2,ar,则求出下一个排列的算法为:(1) 从后面向前找,直到找到一个顺序为止(设下标为j,则aj-1aj填:(ai1aj-1) and (ai1ak,显然是从小到大冒泡排序用。 小结:重视题目给出的每一个信息与程序中的哪些语句对应;如果没有样例,自己找一个典型的,运行运行找出规律;程序的分块! 7.数据结构题(1999年高中组试题)问题描述求一棵树的深度与宽度。

12、算法说明树可用数组tree:array1.n,1.5of integer; 其中:treeI,1表示结点号;treeI,2treeI,5所属结点如上图可表示为: 1 2 3 4 0 2 5 6 7 0 3 8 0 0 0 4 9 10 0 0 5 0 0 0 0 6 0 0 0 0 7 11 12 0 0 8 0 0 0 0 9 0 0 0 0 10 0 0 0 0 11 0 0 0 0 12 13 0 0 0 13 0 0 0 0在求解的过程中,用到数组G:ARRAY1.N,1.7OF INTEGER;GI,1表示父结点,GI,2表示层次, GI,3表示本结点号,GI,4GI,7表示子女结点

13、;同时,设2个指针SP1(取数指针),SP2(存数指针)程序清单: program exp3;const n=13;var i,j,k,sp1,sp2,n1,n2,jmax,p: tree: g :array1.n,1.7of integer;=1 to n do treei,1: for j:=2 to 5 do read (treei,j); sp1:sp2:g1,1:g1,2:g1,3:=4 to 7 do g1,i:=tree1,i-2; while_do p:=gsp1,2;n2:=gsp1,3;_;=4; while _do n1:=gsp1,j;_; gsp2,1:=n2;gsp

14、2,2:=p;gsp2,3:=n1;=1 to 4 do gsp2,i+3:=treen1,i+1; _; writeln(maxd=,gsp2,2);=g1,2;jmax:=2 to sp2 do if _then j: if jjmax then jmax: _;=g,2;max1=,jmax); end.1) 本题的数据结构含义,首先要搞清楚:treei,j存储编号为i的结点的第j号孩子(2=j=5,即最多4个孩子),treei,j=0表示不存在;gi,k是一个队列,sp1为读取队列用的指针,sp2为存储队列用的指针。gi,1 存储i的父结点,gi,2存储i所在的层次,gi,3存储本结点

15、的编号i,gi,4,gi,5,gi,6,gi,7存储i的孩子结点编号。列出g的表格形式,以便更加直观!2) 程序关键在红色和蓝色的两段。先看红色段,显然表示队列非空时做,所以应该填:sp1=sp2;变量p是用来存放层次的,所以填:p:=p+1;为该结点的孩子结点准备好层次;n2是表示当前处理的结点号,n1是表示n2的孩子结点号(用j循环),这个地方的循环是为了遍历本结点的所有孩子,所以填:gsp1,j0;那么干什么呢?不要忘记一个重要的事情,队列的读取都需要移动指针(sp1,sp2),所以正好,为下面的存入操作作准备,即sp2:=sp2+1;为下一个结点的遍历操作作准备,即读指针下移:sp1:=sp1+1;3) 下面看看蓝色的程序段,目的很明显是为了输出。再注意题目的目的:输出树的宽度和深度!深度简单,其实就是gsp2,2。题目也没有考你!那么剩下的问题显然就是为了求宽度。方法也很简单,就是求每一层的宽度(即gI,4gI,7中的非0个数,或者按本题的方法是看gI,2中最多有几个数相同),然后打擂台找出最大值。因此,填:gI,2=k,计算层次相同的元素个数

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1