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

第1题
[问题描述]
    下面程序的功能是从键盘读取a,b数组的元素,a,b数组均已从小到大排好序(无相同元素),
    现将a,b合并为数组c,同样要求数组c也是从小到大排好序(有相同元素时只保留一个)。
[程序说明]
    程序中N表示数组a,b的长度,i,j,k分别表示数组a,b,c的取数或存数的指针。
[程序清单]
const n=8; m=2*n;
type
     arr1 = array[1..n] of integer;
     arr2 = array[1..m] of integer;
var
     a,b:arr1;
     c: arr2;
     i, j, k :integer;
procedure copy(x:arr1; var y:arr2; var i, j :integer);
begin
     i:=i+1; y[i]:=x[j]; j:=j+1;
end;
begin
  for i:=1 to n do read(a[i]); readln;
  for i:=1 to n do read(b[i]); readln;
  i:=1;j:=1; ___①___
  while ___②___ do
   if a[i] < b[j] then copy(a, c, k, i)
      else if b[j] < a[i] then copy(b, c, k, j)
          else begin
            copy(a, c, k, i);
            ___③___
          end;
  while ___④___ do copy(a, c, k, i);
  while ___⑤___ do copy(b, c, k, j);
  for i: =1 to k do write(c[i]:4);
  writeln;
end.

第2题
[问题描述]
    求一棵树的深度与宽度。
[算法说明]
    树可用数组tree:array[1..n,1..5] Of integer;
    其中:tree[i,1]表示结点号;tree[i,2]—tree[i,5]所属结点
    如右图可表示为:
1     2     3     4    0                               (1)
2     5     6     7    0                       ┏━━━╋━━━┓
3     8     0     0    0                       (2)     (3)     (4)
4     9     10    0    0                 ┏━━╋━━┓┃      ┣━━┓
5     0     0     0    0                 (5)   (6)  (7)(8)     (9)   (10)
6     0     0     0    0                             ┣━┓
7     11    12    0    0                            (11) (12)
8     0     0     0    0                             ┃
9     0     0     0    0                            (13)
10    0     0     0    0
11    0     0     0    0
在求解的过程中,用到数组g:array[1..n,1..7] of integer;
其中:g[i,1]表示父结点,g[i,2]表示层次,
g[i,3]表示本结点号,g[i,4]—g[i,7]表示子女结点;
同时,设2个指针sp1(取数指针),sp2(存数指针)
[程序清单]
const n = 13;
var i, j, k, sp1, sp2, n1, n2, jmax, p:integer;
    tree: array[1..n,1..5] of integer;
    g: array[1..n,1..7] of integer;
begin
for i:=1 to n do
   begin
      tree[i, 1]:=i;
         for j:=2 to 5 do read(tree[i, j] ;readln;
   end;
sp1:=1;sp2:=1;  g[1, 1]:=0;  g[1,2]:=1;  g[1,3]:=1;
for i: =4 to 7 do g[1, i]: =tree[1, i-2];
while ___①___ do
    begin
       p:=g[sp1, 2]; n2:=g[sp1, 3];___②___; j:=4;
       while  ___③___  do
         begin
            n1: =g[sp1, i]; j: =j+1; ___④___;
            g[sp2, 1]:=n2; g[sp2, 2]: =p; g[sp2, 3]:=n1;
            for i:=1 to 4 do g[sp2, i+3]:=tree[n1, i+1];
         end;
     ___⑤___;
  end;
writeln('maxd=',g[sp2, 2]); j:=1; k:=g[1, 2];jmax:=O;
for i:=2 to sp2 do
if ___⑥___ then j:=j+1
       else begin
          if j > jmax then jmax: = j;
            ___⑦___;k:=g[1, 2];
       end;
if j > jmax then jmax:=j;
writeln('max1=",jmax);
end.

第3题
[问题描述]
    用生成法求出1,2,…,r的全排列(r<=8)。
[算法说明]
    用数组a:arrary[1..r] of integer;表示排列;
    初始化时,a[i]:=1(i=1,2,…,r)
    设中间的某一个排列为a[1],a[2],…,a[r]
    则求出下一个排列的算法为:
    ①从后面向前找,直到找到一个顺序为止(设下标为j-1,则a[j-1] < a[j])
    ②从a[j]-a[r]中,找出一个a[k]比a[j-1]小的最小元素
    ③将a[j-1]与a[k]交换
    ④将a[j],a[j+1],…,a[r]由小到大顺序。
[程序清单]
const r=7;
var
   n,i,s,k,j,i1,t:intger;
   a:array[1..r] of integer;
procedure printl;
   var ik: integer;
begin

  for ik:=1 to r do write (a[ik]:8);writeln;
  end
begin
for i:=1 to r do  ___①___
printl,
s:=1;
for i:=2 to r do s:=s*i;
s:=s-1
for i:=___②___ do
  begin
     j:=r;
     while ___③___ do j:=j-1;
     k:=j;
     for il:=j+l to r do
      if ___④___ then k:=i1;
     t:=a[j-1]; a[j-1]:=a[k]; a[k]:=t;
     for i1:=j to r-1 do
       for k:=i1+1 to r do
         if ___⑤___ then
          begin
            t:=a[i1]; a[i1]:=a[k]; a[k]:=t;
          end;
     printl;
  end;
end.

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

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

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