| 网站首页 | 学校介绍 | 德育工作 | 家长学校 | 教学教研 | 信息技术 | 书香飘逸 | 资源下载 | 靓图欣赏 | 雁过留声 | 语文 | 
最新公告:     已所不欲,勿施于人,已之所欲,施之于人!  [adminit  2007年4月19日]            生命如流水,只有在他的急流与奔向前去的时候,才美丽,才有意义。 ——张闻天  [旗峰中学  2006年7月8日]            不要让忧愁压在你的心头,也不要让犹豫缠住你的脚步,满天的阴霾终会被风吹散,而晴朗的天空就是你无比辉煌的前程。只有在遭受痛苦经历时,仍然能笑,仍然能乐观的生活的人,才称得起是真正坚强的人。生活是一面镜子,你对它笑,他就对你笑;你对它哭,他也对你哭。  [旗峰中学  2006年7月8日]            勤学如春起之苗,不见其增,日有所长;辍学如磨刀之石,不见其损,日有所亏。  [旗峰中学  2005年11月3日]            志不强者智不达,言不信者行不果。  [旗峰中学  2005年11月3日]        
您现在的位置: 旗峰中学校园网 >> 信息技术 >> 信息奥赛 >> 奥赛题库 >> 文章正文
专题栏目
更多内容
最新推荐 更多内容
相关文章
关于举办信息技术新课程
第十四讲 循环语句
信息化建设“金”字工程
有多少健康可以重来
第十一届青少年信息学联
初赛综合练习题
计算机基础知识试题详解
基础知识练习题(二)
基础知识练习题(一)
初赛模拟试题(七)
更多内容
[图文]完善程序训练(二)         
完善程序训练(二)
作者:admin 文章来源:本站原创 点击数: 更新时间:2005-9-30 13:43:01

第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:anay[1..n] of integer和逆数计数器s,然后用一个二重循环求出数列的逆数。
[程序清单]
const n = 10;
var i, j, s: integer;
  a: array[1..n] of integer;
begin
  s:=0;
  for i:= 1 to n do read(a[i]);
  for i:= 1 to ___(1)___ do
     for j:= ___(2)___ to n do
       if a[i] > a[j] then ___(3)___
  writeln('s:',s)
end.
第2题
[问题描述]
    装球:设有n个盒子(n足够大,可装入任何数量的球),分别编号1,2,…。同时有k个小球(k>0),今将k个小球装入到盒子中去。装入规则如下:
    (1)第一个盒子不能为空。
    (2)装入必须严格按递增顺序进行。
    例如,当k:8,n;6时,装入方法有1,2,5或1,3,4。
    (3)在满足上面的两个条件下,要求有球的盒子尽可能多。
    (4)装完后,相邻盒子中球的个数差的绝对值之和最小(未装的盒子不计)。
    如上例中
    装入法1,2,5,则差的绝对值之和为2-1+5-2=4
    装入法1,3,4,则差的绝对值之和为3-1+4-3=3
    程序要求:给出k(k表示小球的个数)之后,求出满足上述四个条件的装入方法。
[算法说明]
    设置数组a:anay[1..n] of integer;用数组元素代表盒子,然后依次装入小球。
[程序清单]
const n = 20;
var i, j, k, l:integer;
  a: array[1..n] of integer;
begin
  readln(k);
  ___(1)___;
  j:=1;
  while ___(2)___ do begin
     a[j]:=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(a[I]:4)
end.
第3题
[问题描述]
    积木游戏:设有n个小木块排成一排,如下图:
    口口口……
    游戏开始时,每个小木块向下的一面涂有红、黄、蓝三种颜色之中的一种(约定:0表示红色,1表示黄色,2表示蓝色)。要求通过翻看与交换方式对小木块重新排列(翻看的规则为每
个小木块只能看一次),最终成为下面的形状:
    口口口……口  口口口……口  口口口……
         红           蓝           黄
    即相同颜色的木块排列在一起,设计一个翻看与交换的方案,使得用最少的交换次数实现上面的要求。
[算法说明]
    翻看小木块时,可以从两端进行。例如,设中间状态如下:
    口口口……口  回口口……回  口口口……回  口口口……
         红       a 未翻过 b      蓝     c      黄
    此时,可以从两个方向看,即从a或b处开始:
    1.若看a则有三种可能性:
    为红色,则不用交换
    为蓝色,交换一次,即a与b交换
    为黄色,交换两次,即c与b交换一次,然后a与c再交换一次
    此时,平均交换次数为1。
    2.若看b,也有三种可能性:
    为蓝色,则不用交换
    为红色,交换一次,即b与a交换。
    为黄色,交换一次,即b与c交换。
    此时,平均交换次数为2/3。
    由此可见,从b处翻看直到游戏结束,次数最少符合题目要求。
[程序清单]
const n=20;
var i, tem, r, b, y: integer;
    a:array[1..n] of O..2;
begin
  for i:=1 to n do read(a[i]);
  r:=1; ___(1)___ ; y:=n;
  while ___(2)___ do
     if ___(3)___ then begin
        tem:=a[r];a[r]:=a[b];a[b]:=tem;
        r:=r+1
       end
     else if ___(4)___ then begin
        tem:=a[b];a[b]:=a[y];a[y]:=tem;
        ___(5)___ ; ___(6)___ ;
       end
       else b:=b-1;
  for i:=1 to n do write(a[i]:3)
end.
第4题
[问题描述]
    四色问题。设有下列形状的图形:有8个区域,其编号为1,2,…,n。(n=8)
 
图形中各区域的相邻关系用上边的邻接矩阵表示:1——相邻,0——不相邻。 问题要求:将上面图形的每一个部分涂上红(1),黄(2),蓝(3),绿(4)四种颜色之一,要求相邻的部分不同色。 [算法说明] 用数组r:array[1..n,1..n] of 0..1;表示邻接矩阵 s:array[1..n] of Integer;表示涂的颜色。 采用回溯的方法,首先给第一个图形涂上红色(1),然后在下面的图形中依次涂上其他颜色,当有矛盾时回溯解决。 [程序清单] const n=8; var I, j, k :integer; r:array[1..n,1..n] of 0..1; s:array[1..n] of integer; begin for i:=1 to n do begin for j:=1 to n do read(r[i,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 < i then ___(3)___ else begin ___(4)___ i:=i+1; j:=1 end end; if j > 4 then begin i := i - 1; ___(5)___ end; end; for i:=1 to n do writeln(i,'---',s[i]) end. 第5题 [问题描述] 多项式加法运算:一个仅含有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) [算法说明] 多项式可用数组p:array[1..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; p1[j1,1]:=x;p1[j1,2]:=y; read(x,y) end; j1:=j1+1; p1[j1,1]:=O; p1[j1, 2]:=O; write ('Input Q (x) ='); read(x, y); j2:=0; while x <> 0 do begin j2:=j2+1; p2[j2,1]:=x; p2[j2,2]:=y; read (x, y) end; j2:=j2+1; p2[j2,1]:=0; p2[j2,2]:=O; for i:=1 to j1 do begin p3[i,1]:=p1[i, 1]; p3[i,2]:=p1[i, 2] end; i:=1; while ___(1)___ do begin If ___(2)___ then begin for j:=j1 down to 1 do begin p3[j+1,1]:=p3[j,1]; p3[j+1,2]:=p3[j,2] end; p3[i,1]:=p2[i,1]; p3[i,2]:=p2[i,2]; j1:=j1+1 end else begin i1:=1; while p2[i,2] < p3[i1,2] do ___(3)___ ; if p2[i,2]=p3[i1,2] then p3[i1,1]:= ___(4)___ else begin For j:=j1 downto i1 do begin p3[j+1,1]:=p3[j,1]; p3[j+1,2]:=p3[j,2] end; p3[i1,1]:=p[I,1]; p3[i1,2]:=p3[I,2]; ___(5)___ end; end; i: =i+1; end; for j:=1 to j1-2 do write('(',p3[j,1],',',p3[j,2],'),'); writeln('(',p3[j+1,1],',',p3[j+1,2],')'); end.

文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 管理登录 |