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

第1题
[问题描述]
    输入 n 个 0 到 100 之间的整数,由小到大排序输出,每行输出8个
[程序清单]
PROGRAM CHU7_5;
  VAR I,J,K,N,X:INTEGER;
      B:ARRAY[0..00] OF INTEGER;
BEGIN
  READLN(N);
  FOR I:=0 TO 100 DO B[I]:=0;
  FOR I:=1 TO N DO
    BEGIN
      READLN(X);
      B[X]:=___(1)___
    END;
  ___(2)___  
  FOR I:=0 TO 100 DO
    WHILE ___(3)___  DO
      BEGIN
        WRITE ___(4)___;
        K:=K+1;
        B[I]:=B[I]-1;
        IF ___(5)___ THEN WRITELN;
      END;
  READLN;
END.

第2题
[问题描述]
    在A、B两个城市之间设有N个路站(如下图中的S1,且N<100),城市与路站之间、
路站和路站之间各有若干条路段(各路段数<=20,且每条路段上的距离均为一个整数)。
    A,B的一条通路是指:从A出发,可经过任一路段到达S1,再从S1出发经过任一路
段,…最后到达B。通路上路段距离之和称为通路距离(最大距离<=1000)。当所有的路
段距离给出之后,求出所有不同距离的通路个数(相同距离仅记一次)。
    例如:下图所示是当N=1时的情况:


从A到B的通路条数为6,但因其中通路5+5=4+6,所以满足条件的不同距离的通路条数为5。

[算法说明]本题采用穷举算法。
    数据结构:N:记录A,B间路站的个数
          数组D[I,0]记录第I-1个到第I路站间路段的个数
              D[I,1],D[I,2],…记录每个路段距离
          数组G记录可取到的距离
[程序清单]
program CHU7_6;
var i,j,n,s:integer;
  b:array[0..100] of integer;
  d:array[0..100,0..20] of integer;
  g:array[0..1000] of 0..1;
begin
  readln(n);
  for i:=1 to n+1 do
    begin
      readln(d[i,0]);
      for j:=1 to d[i,0] do read(d[i,j]);
    end;
  d[0,0]:=1;
  for i:=1 to n+1 do b[i]:=1;
  b[0]:=0;
  for i:=1 to 1000 do g[i]:=0;
  while  ___(1)___  do
    begin
      s:=0;
      for i:=1 to n+1 do
        s:= ___(2)___     
        g[s]:=1;j:=n+1;
      while ___(3)___ do j:=j-1;
      b[j]:=b[j]+1;
      for i:=j+1 to n+1 do b[i]:=1;
    end;
  s:=0;
  for i:=1 to 1000 do
    ___(4)___;      
  writeln(s);readln;
end.

第3题
[问题描述]
    存储空间的回收算法。设在内存中已经存放了若干个作业A,B,C,D。其余的
空间为可用的(如图一中(a))。

此时,可用空间可用一个二维数组A表示,(如下表一中(a)),其中:A(i,1)  
对应第i个可用空间首址    A(i,2)  对应第i个可用空间长度如上图中,A:
100
50
300
100
50
100

表一(a),(b)

0
0
100
50
300
100
500
100
10000
0

    现某个作业释放一个区域,,其首址为d,长度为L,此时将释放区域加人到
可用空间表中。要求在加入时,若可用空间相邻时,则必须进行合并。因此出现
下面的4种情况(如上图一(b)所示)。
    (1)下靠,即回收区域和下面可用空间相邻,例如,d=80,L=20,此时成为
表二中的(a)。
    (2)上靠,例如,d=600,L=50,此时表成为表二中的(b)
    (3)上、下靠,例如,d=150,L=150,此时表成为表二中的(c)。
    (4)上、下不靠,例如,d=430,L=20,此时表成为表二中的(d)。
70
80
300
100
50
100
100
50
300
100
500
150
100
300
500
100
100
50
300
100
430
20
500
100
表二(a)下靠
表二(b)上靠
表二(c)上、下靠
表二(d)上、下不靠

[程序说明]
    对数组A预置2个标志,即头和尾标志,成为表二中(b),这样可使算法简单,
SP为A表末地址。
[程序清单]
  Program GAO7_5;
  Var I,J,SP,D,L:integer;
  DK:array[0..100,1..2] of integer;
  Begin
    readln(SP);
    for I:=1 to SP do
      readln(DK[I,1],DK[I,2]);
      DK[0,1]:=0; DK[0,2]:=0; ——①——
      DK[Sp,1]:=10000; DK[SP,2]:=0; readln(D,L);I:=1;
    while Dk[I,1]

第4题
[问题描述]
    求关键路径
    设有一个工程网络如下图表示(无环路的有向图):其中,顶点表示活动,①表示
工程开始,⑤表示工程结束(可变,用N表示),边上的数字表示活动延续的时间。

    如上图中,活动①开始5天后活动②才能开始工作,而活动③则要等①、②完成之
后才能开始,即最早也要7天后才能工作。
    在工程网络中,延续时间最长的路径称为关键路径。上图中的关键路径为:
    ①——②——③——④——⑤共18天完成。
    关键路径的算法如下:
    1.数据结构:
    数组  R    表示活动的延续时间,若无连线,则用-1表示;
      EET    表示活动最早可以开始的时间
      ET     表示活动最迟应该开始的时间
      关键路径通过点J,具有如下的性质:EET(J)=ET(J)
    2.约定:
    结点的排列已经过拓扑排序,即序号前面的结点会影响序号后面结点的活动。
[程序清单]
program gao7_6;
var i,j,n,max,min,w,x,y:integer;
    r:array[1..20,1..20] of integer;
    eet,et:array[1..20] of integer;
begin
  readln(n);
  for i:=1 to n do
    for j:=1 to n do
      r[i,j]:=-1;
  readln(x,y,w);
  while x<>0 do
    begin
      r[x,y]:=w;
      readln(x,y,w);
    end;
  eet[1]:=0;
  for i:=2 to n do
    begin
    max:=0;
    for j:=1 to n do
      if r[j,i]<>-1 then
        if r[j,i]+eet[j]>max then max:=r[j,i]+eet[j];
    eet[i]:=max;
    end;
    et[i]:=eet[i];
    for i:=n-1 downto 1 do
      begin
        min:=10000;
        for j:=1 to n do
         if r[i,j]<>-1 then
           if et[j]-r[i,j]<>-1 then write(i,'to');
      write(n);readln;
end.

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

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

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