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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

完善程序题集.docx

1、完善程序题集第1题问题描述 求出所有满足列条件的二位数:将此二位数的个位数字与十位数字进行交换,可得到一个新的数,要求新数与原数之和小于100。 程序要求:每行输出6个满足要求的数。算法说明 分解每一个二位数,然后重新组成一个新数,当满足条件时,用计数器来统计个数。程序清单 begin k:=0; for i:=_ to 99 do begin x:=_; y:=_; j:=x*10+y; if _ then begin k:=k+1; write(1:4); _ then writeln; end end end 第2题问题描述 找出小于33的6个正整数,用这些整数进行加法运算,使得包括原来

2、的整数在内能组成尽可能多的不同整数。 例如:用2,3,5这3个数能组成下面的数 2,3,5 2+3=5, 5已经存在 2+5=7, 3+5=8, 2+3+5=10 所以用2,3,5能组成6个不同的数。 程序要求:输出所选的这6个数,以及能组成不同整数的个数。算法说明 选择的这6个数,用来组成数时应该尽可能不重复,引入数组a保存找出的这6个数。程序清单 begin a1:=1;t:=0; for i:=2 to 6 do begin _; for j:=1 to i-1 do s:=_; ai:=_; end; for i:=1 tO 6 dO begin t:=_; write(ai,) en

3、d; writeln(能组成不同整数的个数:,t) end 第3题问题描述 求出21000之间长度最长的、成等差数列的素数(质数)。 例如:在2-50之间的全部素数有 2,3,5,7,11,13,17,19,23,29,3l,37,4l,43,47 其中公差为1的素数数列为2,3,其长度为2 公差为2的素数数列为3,5,7,其长度为3 程序要求:输出满足条件的素数数列。算法说明 首先用筛选法求出此范围内的全部素数,存放在数组b中,然后用2个变量i,j, 逐步求出满足条件的素数数列。程序清单begin max:=0;num:=1000; for i:=2 to num do bi:=i; for

4、 i:=2 to _ do if _ then begin k:=i+i; while k = num do begin bk:=0; k:=k+i end end; for i:=2 to num-1 do if _ then begin j:=1; dj:=bi; for i1:=_ do if bi10 then begin delta:=_; k:=delta; while (i+k max then begin max:=j; c:=d 数组d的值赋给数组c end; j:=1 end end; writeln(The max length is:,max); write(The s

5、tring is:); for i:=1 to max do write(ci,); writelnend 第4题参考图第4题问题描述 求出二个整形数组错位相加的最大面积 1数组面积的定义:(限定数组头尾不为0) 设有一个数组C二(4,8,12,0,6) 则C的面积为Sc(4+8)、2+(8+12)/2+12/2+6/2 也就是说,Sc=各梯形面积之和(其中梯形的高约定为1,三角形作为梯形的特殊情况处理)。 又如D=(12,24,6)是,其面积的定义为 Sd=(12+24)/2+(24+6)/2 2数组错位相加的定义 设有2个正整数的数组a,b,长度为n,当n=5时: a=(34,26, 15

6、,44, 12) b=(23,46,4,0, 18) 对a、b进行错位相加,可能有下列情况 34 26 15 44 12 +) 23 46 4 0 18 34 26 15 44 12 23 46 4 0 18或: 34 26 15 44 12 +) 23 46 4 0 18 34 26 15 44 35 46 4 0 18或: 34 26 15 44 12 +) 23 46 4 0 18 34 26 15 67 58 4 0 18或 最后有: 34 26 15 44 12 +) 23 46 4 0 18 23 46 4 0 18 34 26 15 44 12 可以看到:由于错位不同,相加的结果

7、也不同。 程序要求:找出一个错位相加的方案,使得输出的数组面积为最大。算法说明 设a,b的长度为10,用a,b:array1.10 of integer表示,其结果用数组c,d:array1. 30 of integer表示。 错位相加的过程可以从开始不重叠,然后逐步重叠,再到最后的不重叠。 梯形面积的计算公式为:(上底+下底)*高/2,其中约定高为1,故可写为(上底十下底)2。程序清单 const n=10; function sea:=real;计算数组C面积 begin j1:=1; while _ do j1: = j1 + 1; if j1 =3*n then sea: =0 els

8、e begin j2:=3 *n; while _ do j2: = j2 - 1; if j1 =j2 then sea: =0 else begin j3: =cjl +cj2; for j4:=jl+l to j2-1 do j3:=j3 +cj4 *2; sea: = j3/2 end end end; begin 主程序 for i: =1 to n do read(ai); for j: =1 to n do read(bj); _ ; for i: =1 to 2 * n+1 do begin for j:=1 to 3*n do _ ; for j:=1 to n do cj+

9、n:=aj; for j:1 to n do _ ; p:=sea; if p s then begin d: =c; s: =p end; end; for i: = 1 to 3 * n do write(di, ); writeln; writeln ( s=, s) end.第5题问题描述 表的操作:设有一个表,记为L=(a1,a2,an),其中: L:表名。 a1,a2,an为表中的元素。 当ai为0-9数字时,表示元素,为大写字母时表示是另一个表,但不能循环定义。 例如下列表的定义是合法的(约定L是第一个表的表名)。 L=(1,3,K,8,0,4) K=(3,P,4,H,7) P=

10、(2,3) H=(4,0,5,3)程序要求:当全部表给出之后,求出表中所有元素的最大元素,以及表中所有元素之和。【算法说明】 表用记录类型定义:设lmax为表中元素最大个数 tabtype:record length:0.lmax; 长度 element:array1.lmax Of char; 表体 end; 再定义队列: qtype=record base:array0.lmax Of char; front,rear:0.lmax; end; 为此,设计一个字符入队的过程inqueue,出队函数outqueue,表中最大元素及元素求和均采用递归计算。程序清单const lmax = 38

11、;var t: array A. Z of tabtype; s: stringlmax;procedure inqueue(var q:qtype; c : char);begin q. rear:= _(1)_ ; q. baseq.rear := cend;function outqueue(var q:qtype):char;begin q. front:= _(2)_ ; outqueue:= q.baseq.frontend.function maxnumber(c:char):char;var max: char;begin max:= chr(0); for i:= 1 to

12、tc.length do begin ch:= tc.elementi; if _(3)_ then m:= maxnumber(ch) else m:= ch if max m then max:=m end; _(4)_end;function total(c:char):integervar k, i: integer;begin k:=0; for i:= 1 to tc.length do begin ch:= te.lelmenti; if _(5)_ then m:= total(ch); else m:=ord(ch)-ord(0); k:=k+m end; total:= k

13、end;begin max:=36; for tabno:= A to Z do ttabno.length:=0; q.front:=O;q.rear:=0; inqueue(q,L); while q.front .rear do begin tabno:= outqueue(q); write(tabno,=); readln(s); i:=1; while si ( do i:=i+1; while si ) do begin if(si =a)and(si =A)and(si=0)and(si =0)and(xi 0 then while ak =0 do begin _(7)_ _

14、(8)_ endend.第1题问题描述 设有n个不同整数的数列:例如n二4时,有4个不同整数的数列为17,4,16,5。数列中的第1个数17,比它后面的三个数都大,则称数17的逆数为3。数列中的第2个数4比它后面的数都小,则称数4的逆数为0。同时记数列中全部逆数的和称为数列的逆数。上例中,数列17,4,16,5的逆数为3+0+1+0=4 程序要求:当给出n个不同整数的数列后,求出此数列的逆数。算法说明 为求得上面问题的解,设置数组a:anay1.n of integer和逆数计数器s,然后用一个二重循环求出数列的逆数。程序清单const n = 10;var i, j, s: integer;

15、 a: array1.n of integer;begin s:=0; for i:= 1 to n do read(ai); for i:= 1 to _(1)_ do for j:= _(2)_ to n do if ai aj then _(3)_ writeln(s:,s)end.第2题问题描述 装球:设有n个盒子(n足够大,可装入任何数量的球),分别编号1,2,。同时有k个小球(k0),今将k个小球装入到盒子中去。装入规则如下: (1)第一个盒子不能为空。 (2)装入必须严格按递增顺序进行。 例如,当k:8,n;6时,装入方法有1,2,5或1,3,4。 (3)在满足上面的两个条件下,

16、要求有球的盒子尽可能多。 (4)装完后,相邻盒子中球的个数差的绝对值之和最小(未装的盒子不计)。 如上例中 装入法1,2,5,则差的绝对值之和为2-1+5-2=4 装入法1,3,4,则差的绝对值之和为3-1+4-3=3 程序要求:给出k(k表示小球的个数)之后,求出满足上述四个条件的装入方法。算法说明 设置数组a:anay1.n of integer;用数组元素代表盒子,然后依次装入小球。程序清单const n = 20;var i, j, k, l:integer; a: array1.n of integer;begin readln(k); _(1)_; j:=1; while _(2)

17、_ do begin aj:=j; _(3)_ ;j:=j+1 end; l:=j-1; while k 0 do begin _(4)_ ; k:=k-1; l:=l-1; end; for I:= 1 to _(5)_ do write(aI:4)end.第3题问题描述 积木游戏:设有n个小木块排成一排,如下图: 口口口 游戏开始时,每个小木块向下的一面涂有红、黄、蓝三种颜色之中的一种(约定:0表示红色,1表示黄色,2表示蓝色)。要求通过翻看与交换方式对小木块重新排列(翻看的规则为每个小木块只能看一次),最终成为下面的形状: 口口口口 口口口口 口口口 红 蓝 黄 即相同颜色的木块排列在一

18、起,设计一个翻看与交换的方案,使得用最少的交换次数实现上面的要求。算法说明 翻看小木块时,可以从两端进行。例如,设中间状态如下: 口口口口 回口口回 口口口回 口口口 红 a 未翻过 b 蓝 c 黄 此时,可以从两个方向看,即从a或b处开始: 1若看a则有三种可能性: 为红色,则不用交换 为蓝色,交换一次,即a与b交换 为黄色,交换两次,即c与b交换一次,然后a与c再交换一次 此时,平均交换次数为1。 2若看b,也有三种可能性: 为蓝色,则不用交换 为红色,交换一次,即b与a交换。 为黄色,交换一次,即b与c交换。 此时,平均交换次数为2/3。 由此可见,从b处翻看直到游戏结束,次数最少符合题

19、目要求。程序清单const n=20;var i, tem, r, b, y: integer; a:array1.n of O.2;begin for i:=1 to n do read(ai); r:=1; _(1)_ ; y:=n; while _(2)_ do if _(3)_ then begin tem:=ar;ar:=ab;ab:=tem; r:=r+1 end else if _(4)_ then begin tem:=ab;ab:=ay;ay:=tem; _(5)_ ; _(6)_ ; end else b:=b-1; for i:=1 to n do write(ai:3)

20、end.第4题问题描述 四色问题。设有下列形状的图形:有8个区域,其编号为1,2,n。(n=8) 图形中各区域的相邻关系用上边的邻接矩阵表示:1相邻,0不相邻。 问题要求:将上面图形的每一个部分涂上红(1),黄(2),蓝(3),绿(4)四种颜色之一,要求相邻的部分不同色。算法说明 用数组r:array1.n,1.n of 0.1;表示邻接矩阵 s:array1.n of Integer;表示涂的颜色。 采用回溯的方法,首先给第一个图形涂上红色(1),然后在下面的图形中依次涂上其他颜色,当有矛盾时回溯解决。程序清单const n=8;var I, j, k :integer; r:array1.

21、n,1.n of 0.1; s:array1.n of integer;begin for i:=1 to n do begin for j:=1 to n do read(ri,j); readln end; _(1)_ ; i:=2; j:=1; while i=n do begin while (j = 4) and (i = n) do begin k:=1; while _(2)_ do k:= k + 1; if k 4 then begin i := i - 1; _(5)_ end; end; for i:=1 to n do writeln(i,-,si)end.第5题问题描

22、述 多项式加法运算:一个仅含有x的多项式可以用下列的方式表示: (系数,指数),(系数,指数),(0,0)。其中(0,0)作为结束标志。 例如:P(x)=4x6-3x3+2x2-1可表示为:(4,6),(-3,3),(2,2),(-1,0),(0,0) Q(x)=x4-x+1 可表示为:(1,4),(-1,1),(1,0),(0,0) 当用上面的方式给出2个多项式之后,程序对这两个多项式进行加法运算,结果也用上面的方式给出。 例如:上面的P(x)和Q(x)相加的结果为:4x6+x4-3x3+2x2-x 表示结果为:(4,6),(1,4),(-3,3),(2,2),(-1,1),(0,0)算法说

23、明 多项式可用数组p:array1.n,1.2 of integer表示。 分别以P1表示p,p2表示q,p3表示结果。处理的过程为将p赋值到p3,然后逐项检查q,当发现有相同的方次时,进行系数相加;当发现没有相同的方次时,插入到p3中去。程序清单var x, y, i, i1, j, j1, j2:integer; p1, p2, p3: array 1.20, 1.2 of integer;begin i1:=0; write(Input P(x)=); read (x, y); while x 0 do begin j1:=j1+1; p1j1,1:=x;p1j1,2:=y; read(x,y) end; j1:=j1+1; p1j1,1:=O; p1

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

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