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

第1题
[问题描述]
    读入n个不相同且不为0的数(1<=n<=100),不用排序,求出其中第r个大的数(1≤r≤n),即有r-1个数比它大,其余的数都比它小。例如:输入3,14,22,15,17,6,其中第3个大
的数为15。
[算法说明]
    以数组a[1..100]记录读入的n个数,并以0结束(0本身不是n个数中的数)。然后从第一个数开始,将它与其余的数进行比较并记录出比它大的数的个数(存于变量y中),若y=r=1时,
得到所求结果:否则对下一个数进行同样的处理。
[程序清单]
var r,i,j,k,x,y:integer;
    a:array[1..100] of integer;
    p: boolean;
begin
  j:=0;
  readln(x);
  while ___(1)___ do
     begin
       ___(2)___
       a[j]: =x;
       ___(3)___
     end;
  readln(r); p:=tme; i:=1;
  while p do
  begin
     ___(4)___ ; y: =0;
     for k:=1 to j do
     if x < a[k] then ___(5)___ ;
     if ___(6)___ then begin
       writeln (x);
       p:= false
      end
     else i:=i+1
  end
end.

第2题
[问题描述]
    在进行正整数的除法运算时,可以通过减法来实现。例如x÷y=q…r(q:商,r:余数)可通过下列的方式实现:
    q:=0;r:=x;
    while r >= y do begin r:=r-y;q:=q+1 end;
    结果,商在q中,余数在r中。
[算法说明]
    上面的算法有一个缺点,就是当x比较大、y比较小时,则运算的次数非常多,速度太慢。为提高速度,下面给出改进的算法:先找一个非常接近x的数w,且满足:w=y*2k,y*2k-1<=
x<w,然后通过减法与移位的运算,以较少的运算次数完成除法。
[程序清单]
var x, y, w, r, q:integer;
begin
   readln (x);readln (y);
   r:=x;
   ___(1)___
   while w <= r do ___(2)___
      q: =0;
      while ___(3)___ do
         begin
           w:=w div 2;
           ___(4)___
           if r >= w then begin
              ___(5)___ ;
              r:= ___(6)___ ;
            end;
         end;
   writeln(q,'...',r);
end.

第3题
[问题描述]
    一个正整数(非素数)可以表示成它的因子(1与其本身除外)的乘积。例如:12有因子2,3,4,6,所以可表示为:12=2*2*3=4*3=2*6。给出任一个正整数n,求出它所有的因
子乘积的表达式(交换律得出的不同式子算同一种)。
[算法说明]
    读入一个整数n,首先求出它的所有的因子以及每个因子可能的次数。例如:整数48:
    因子:2  3  4  6  8  12  16  24
    次数:4  1  2  1  1  1   1   1
    将上面的结果存入数组a:array[0..20,1..2]中。其中:a[i,1]表示因子;a[i.2]表示次数。然后用简单回溯的方法求出所有可能的表示:
    数组b[0..20]记录取数情况:c:array[1..20]工作单元。
[程序清单]
vara:array[0..20,1..2] Of integer;
c,b:array[0..20] of integer;
n,m,i,j,s,k,l:integer;
begin
  writeln;readln(n);
  for i:=1 to 20 do a[i,1]:=0;
   ___(1)___ ; a[O..2]:=1; j:=0;
  for i:=2 to n-1 do
  begin
     s:=O; m:=n;
     while (m <> 0) and (m mod i = O) do
     begin
        m:=m div i;
        ___(2)___ ;
     end;
     if ___(3)___ then begin
        j:=j+1; ___(4)___ ;
        a[j,2]:= ___(5)___ ;
     end
  end;
  for i:=0 to j do b[i]:=0;
     while b[0]=0 do
     begin
       k:=j;
       while ___(6)___ do k:= k - 1;
        b[k]:=b[k] +1;
        for l:= ___(7)___ do b[l]:=0;
        s:=1;
        for i:= 1 to j do
        if b[i]<>0 then for l:=1 to b[i] do
          ___(8)___ ;
        if s = n then begin
          for i:=1 to j do c[i]:=b[i];
          write('('); m:-l;
          for i:=1 to j do
            while(c[i] > 0)and(m<>n)do
            begin
              m:=m*a[i,1];
              if m = n then write (a[i,j])
              else begin
                write(a[i,1],'*'); c[i]:=c[i]-1;
              end;
            end;
          writeln(')');
        end;
      end;
end.

第4题
[问题描述]
    给出一个凸多边形,可以取得若干个内接三角形,同时约定内接三角形必须有一条边(仅能有一条边)与凸多边形的边相重合,例如:下面的5边形中,可能有的内接三角形有5种:
△ACD,△BDE,△CEA,△DAB,△EBC
问题要求:当依次给出凸多边形的每个顶点的2个坐标之后,找出一个面积最大的内接三角形,输出该三角形的面积与三个顶点的坐标。 [算法说明] 凸多边形的每个顶点用一对坐标(x,y)表示:用数组p:array[1..2*n] of point;存贮输入的顶点坐标;同时编制一个由三角形的三个顶点计算其面积的函数sea。 [程序清单] const n = 6; type point = record x, y: real end; var p:array[1..2*n] of point; i, j:integer; q1, q2, q3 :point; function sea(p1, p2, p3: point): real; var s1, s2, s3, p4:real; begin s1:=sqrt(p1.x-p2.x) * (p1.x-p2.x) + (p1.y-p2.y) * (p1.y-p2.y); s2:=sqrt(p1.x-p3.x) * (p1.x-p3.x) + (p1.y-p3.y) * (p1.y-p3.y); s3:=sqrt(p2.x-p3.x) * (p2.x-p3.x) + (p2.y-p3.y) * (p2.y-p3.y); p4:= ___(1)___ ;sea:=sqrt(p4*(p4-s1)*(p4-s2)*(p4-s3)); end; begin for i:=1 to n do readln(p[i].x,p[i].y); smax:=0; for i:=1 to n-1 do ___(2)___ for i:=1 to n do for j:= ___(3)___ do if ___(4)___ then begin smax:=sea(p[i],p[i+1],p[j]); ql:=q[i]; q2:= ___(5)___ ;q3:=p[j] end; writeln(smax,q1.x,q1.y,q2.x,q2.y,q3.x,q3.y) end. 第5题 [问题描述] 拼图形:边长为1的正方形面积为1,从边长为1的正方形出发可以用2个边长为1的正方形拼成面积为2的长方形: 同时约定: 1.边长对应相等的长方形被认为是相同的; 2.长度相等的边才能拼接,且两个边必须重合。 从面积为2的长方形出发,用2个面积为2的长方形可拼出面积为4的长方形(包括正方形),拼法如下:
 
同样再从面积为4的长方形(包括正方形)出发,可以拼成面积为8的长方形,拼法如下:
 
可以按上面的方法继续拼下去。 问题:输入一个数n,输出面积不超过n的所有可能拼法。例如:当n=20时,输出(1,1),(2,1),(4,2),(8,2),(16,3)即面积为1的拼法1种,面积为2的拼法1种,面积为4 的拼法2种,面积为8的拼法2种,面积为16的拼法3种。 [算法说明] 矩形可以用三个数x,y,s来表示,其中x,y表示边长,s表示面积,并用数组g[1..100,1..3]表示图形。
 
当给出n之后,可能拼接的次数r满足:2r<=n<2r+1(不包括面积为1的拼法);用数组b[1..100]记录各种面积可能出现的拼法。 [程序清单] type g: record x, y, z: integer end; var gl :array[1..100] of g; i, j, n, s1, jj, j1, j2, i1 :integer; b: array[1..100] of integer; gw:g; function eq(qk:g):boolean; var jeq: integer; p: boolean; begin p:=true; jep:=1; while(p and (jeq <= j))do if ((gk.x=g1[jeq].x)and(gk.y=g1[jeq].y) or((gk.x=g1[jeq].y)and(gk.y=g1[jeq].x)) then p:=false else jeq:= jeq + 1; eq:=p end; begin readln(n); s1:=1; jj:=1; while ___(1)___ do begin ___(2)___ ; jj:= jj + 1 end; ___(3)___ ;j1:=1; j:=1; g1[j].x:=1; g1[j].y:=1; g1[j].z:=1; for i:=2 to jj do begin j2:=j; for i1:=j1 to j2 do begin gw.x:=g1[i1].x*2; gw.y:=g1[i1].y;gw.z:=g1[i1].z*2; if ___(4)___ then begin j:=j+1; g1[j]:=gw end; gw.x:=g1[i1].x; ___(5)___ if eq(gw) then begin j:=j+1; ___(6)___ end; end; j1:=j2 + 1 end; for i:=1 to n do b[i]:=1; for i:=1 to j do ___(7)___ for i:=1 to n do if ___(8)___ then write('(',i,',',b[i],')') end.

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

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

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