信息学奥赛专项习题

资源下载
  1. 二一教育资源

信息学奥赛专项习题

资源简介








一、数学趣题
1、在一桩盗窃案中,有两个嫌疑犯甲和乙,另有四个证人正在受到询问。
第一个证人说:“我只知道甲未盗窃。”
第二个证人说:“我只知道乙未盗窃。”
第三个证人的证词中至少有一个是真的。
第四个证人最后说:“我可以肯定第三个证人的证词是假的。”
通过调查研究,已证实第四个证人说了实话,那么盗窃犯是谁?
2、甲、乙、丙三人被蒙上眼睛,、告诉他们每人头上都带了一顶帽子,帽子的颜色不是红的就是绿的,在这以后,就去掉蒙眼睛的布,要求每个人如果看见别人(一个人或两个人)戴的帽子就举手,并且谁能断定自己头上帽子的颜色,谁就马上离开房间。三人碰巧戴的都是红帽子,因此三人都举了手,几分钟后,丙首先走开了,他是怎么推导出自己头上帽子的颜色的?
3、三只口袋里分别装有两个红球、两个白球、一红一白球,但口袋外贴的标签都是错的,请从一只口袋里取出一只球,使你能根据这个球的颜色说出三只口袋里球的颜色。
4、有9只乒乓球,他们的大小形状一样,其中有一个次品比其他正品的重量轻一点。你能不能用一台天平称两次(不用砝码),就把次品挑出来。
5、在国际饭店的宴会桌旁,甲、乙、丙、丁四位朋友进行有趣的交谈,用了中、英、法、日四种语言,知道的情况如下:
(1)甲、乙、丙各会两种语言,丁只会一种语言;
(2)有一种语言四人中有三人都会;
(3)甲会日语,丁不会日语,乙不会英语;
(4)甲、丙,丙与丁不能直接交谈,乙与丙可以直接交谈;
(5)没有人既会日语又会法语。
问:甲、乙、丙、丁各会什么语言?
6、如果在81个零件中混杂了一个重量较轻的次品,用天平(不用砝码)最少称几次才能把次品找出来?
7、某校数学竞赛,A、B、C、D、E这五位同学取得了前五名,老师对他们说:“祝贺你们取得了好成绩,你们猜一下名次结果。”
A说:“B是第三,C是第五”。
B说:“D是第二,E是第四。”
C说:“A是第一,E是第四。”
D说:“C是第一,B是第二。”
E说:“D是第二,A是第三。”
老师说他们每个都只猜对了一半,那么这五个人实际名次如何呢?
二、排列与组合问题
1、写出从A,B,C,D四个元素中任取两个元素的所有排列.
2、用0到9这10个数字可组成多少个无重复数字的三位数
3、甲、乙、丙、丁四人并排站成一排,如果甲、乙必须站在一起,则不同的排法共有 种.
4、从1到9这9个数字中任选5个,可以组成多少个符合下列条件的五位数.
(1)奇数;(2)能被25整除;
5、7人排成一排,按下列要求,求各有多少种不同的排法.
(1)甲不能排在首位,乙不能排在末位;
(2)甲、乙两人间恰好间隔两人;
6、将N个红球和M个黄球排成一行。例如:N=2,M=3可得到以下6种排法:
红红黄黄黄 红黄红黄黄 红黄黄红黄
黄红红黄黄 黄红黄红黄 黄黄黄红红
问题:当N=4,M=3时有多少种不同排法 (不用列出每种排法)
7、平面上有三条平行直线,每条直线上分别有7,5,6个点,且不同直线上三个点都不在同一条直线上。问用这些点为顶点,能组成多少个不同三角形?
三、阅读程序
1、program t1;
var
g,m: integer;
k,t: real;
begin
k:=0;
g:=0;
for m:=1 to 49 do
begin
g:=g+1;
k:=k+1/(g*(g+1));
end;
writeln ( k: 10: 2 )
end.
输出:______
3、program t3;
var
n, i, t: longint;
tem: integer;
s: string;
begin
readln(n); s:='1';
repeat
i:= length(s);
while s[i] ='1' do
begin
s[i]:= '0' ;dec(i);
end;
if i>0 then s[i]:='1'
else s:= '1' +s;
val(s,t,tem);
until t mod n = 0;
writeln(n,'*',t div n,'=',s);
end.
输入:6
输出:______
5、program t5;
var m,n,i,p,k:integer;
r:array[1..200] of integer;
b: boolean;
begin
m:=6;n:=2;
for i:=1 to m-1 do r[i]:=i+1;
r[m]:=1;i:=0;p:=1;b:=true;
while b do
begin
i:=i+1;k:=p;p:=r[p];
if k=p then
begin
writeln(p);
b:=false;
end
else if i=n+1 then
begin
write(p,' ');i:=0;
p:=r[p];r[k]:=p;
end
end
end.
输出:________
7、program t7;
var n,k,s:longint;
begin
n:=1000000000;
k:=0;
s:=1;
while s <= n do
begin
k:=k+1;
n:=n-s;
s:=s+6*k
end;
writeln (k)
end.
输出:_______
四、完善程序
1、以下程序是将一组整数按从小到大的顺序排列。排序的方法是将长度为n的数a分为两个长度分别为(n div 2)与(n-n div 2)的子数组a1,a2。然后递归调用排序过程,将a1,a2分别排序,最后将a1,a2归并成数组a。例如a=(3,1,2,4),那么a1=(3,1),a2=(2,4)。调用排序过程将a1,a2排序,得到a1=(1,3),a2=(2,4),然后进行合并排序。
从键盘输入数的长度n以及n个整数,存在数组a中,调用子过程sort进行排序,最后输出排序结果。
program wsh;
const maxn=100;.
type arr:array[1..maxn] of integer;
var
a:array[1..maxn] of integer; n,i:integer;
procedure sort(n:integer; var a:arr);
var
i, p1, p2, n1, n2: integer;
a1,a2 :arr;
begin
if n = 1 then exit;
fillchar(a1,sizeof(a1) ,0);
fillchar(a2,sizeof(a2) ,0);
n1:=0; n2:=0;
n1:=n div 2; n2:=(____(1)____);
for i:= 1 to n1 do a1[i]:=a[i];
for i:= 1 to n2 do a2[i]:=____(2)____;
____(3)____;
sort(n2, a2);
p1:=1; p2:=1; n:=0;
while (p1 <= n1) and (____(4)____) do
begin
n:=n+1;
if ____(5)____
then begin a[n]:=a1[p1] ;inc(p1); end
else begin ____(6)____; inc(p2) ;end;
end;
if p1 <= n1
then for i:= ____(7)____ to n1 do begin n:=n+1;a[n]:=a1[i] end
else for i:=p2 to n2 do begin n:=n+1; a[n]:=a2[i]; end;
end;
begin
write('n = ');
readln (n);
for i:= 1 to n do read(a[i]);
readln;
sort(n,a);
for i:=1 to n do write(a[i],'');
writeln;
end.
2、有n(1≤n≤100)个同学种m(1≤n≤m≤100)种小树苗,例如:4个同学(1、2、3、4)每小时种4种树苗(A、B、C、D)的数量估算如下表所示,编程输出每人种1种苗所用的总时间最少的安排方案和所花费的时间。
学 生 A B C D
1 5 2 4 5
2 4 3 5 3
3 5 2 4 2
4 3 2 3 3
program wsh;
const
maxn=100; maxm = 100;
var
a: array[1..maxn, 1..maxm] of integer;
m, n: integer;
i, j, t: integer;
procedure work(k,t1: integer);
var i: integer;
begin
if ____(1)____ then
begin
if t1 < t then t1:=t;
exit;
end;
for i:= ___(2)___ to ___(3)___ do
work(k+1,___(4)___);
end;
begin
readln(n,m);
for i:=1 to n do
begin
for j:=1 to m do read (a[i,j]);
readln
end;
t:= maxint;
work(1,0);
writeln(t)
end.
3、下列程序是对冒泡排序的一种改进,数组elem中有n个元素elem[1]、elem[2]…、elem[n]。要排序的关键字是key。先从一端开始扫描,进行比较、交换,然后改变下一趟的扫描方向进行同样的处理。请完善下面的过程。
program wsh;
type
Td = record
key: integer;
inf: real;
end;
var
elem:array[1..1000] of Td;
n, i: integer;
procedure shakesort(n: integer);
var
i, t, h: integer;
c: boolean;
temp: Td;
begin
h:=1; t:=n;
repeat
____(1)____;
for i:=h to t-1 do
if elem[i].key > elem[i+1].key then begin
temp:=elem[i]; elem[i]:=elem[i+1];
elem[i+1]:=temp; ____(2)____;
end;
____(3)____;
for i:=t-1 downto h do
if elem[i].key > elem[i+1].key then begin
temp:=elem[i]; elem[i]:=elem[i+1];
elem[i+1]:=temp; ____(4)____;
end ;
____(5)____;
until c ;
end;
begin{主过程}
…{略}
end.
4、[问题描述]在n个元素的集合S中,找最大和最小元素(设n的值为2m).
[解题思路]把集合S分成两个子集S1和S2,每个子集有n/2个元素.应用递归过程search(S,Y,MAX,MIN)(S中有2k个元素),过程返回一对(MAX,MIN)值,为最大和最小元素,最后,把S1和S2中的最大和最小元素进行比较,从而得到S中的最大和最小元素.
[程序]
program wsh;
type data = array[1..256] of byte;
jh = set of byte;
var s,ss:jh;
a:data;
i ,j, d,largest, smallest: byte;
function sq(k: byte): byte;
begin
if k =1 then sq:=2 else sq:=2*sq(k-1);
end;
procedure seareh(x:jh; y:byte; var max,rain:byte);
var k,p,w,nxl,nx2,ni1,ni2,n: byte;
m:array[1..2] of byte;
s1 ,s2:jh;
begin
if y = 2 then
begin
p:=0;
for k:=1 to i do
if ___(1)___ then
begin
p:=p+1;m[p]:=___(2)___;
end;
if ___(3)___ then
begin
w:=m[1];m[1]:=m[2];m[2]:=w;
end;
max:= m[1] ;min:= m[2] ;exit;
end
else
begin
si:=[];n:=O;y:=___(4)___;
for k:=1 to i do
if ___(5)___ then
begin
n:=n+1;if n <= y then s1:=___(6)___;
end;
s2:=___(7)___;
search(s1,y,nx1,ni1);search(s2,y,nx2,ni2);
if nx1 > nx2 then max:=nx1 else max:=nx2;
if ni1 < ni2 then min:=ni1 else min:=ni2;
end
end;
begin
i:=0;s:=[];ss:=[];
for j:=1 to 7 do ss:=ss+[sq(j)];
writeln('enter 2︿n data:');
repeat
while not eoln do
begin
i:=i + 1; read(d);
if ___(8)___ then i:= i - 1
else begin
a[i]:=d;s:=s+[a[i]];
end;
end; readln;
until i in ss;
search(s,i,largest,smallest);
writeln('largest-data:',largest,'smallest-data:',smallest)
end.
5、[问题描述]将一个含有运算符为:(、)、+、-、*、/、︿(乘幂运算)、~(求负运算)的中缀表达式,如:((1+2)*5)︿2-(3+5)/2转化为后缀表达式,如:12+5*2︿35+2/-.
[解题思路]将中缀表达式转化为后缀表达式,首先规定运算符的优先数如下:
┌───┬───┬───┬─────┬──────┬───┬───┐
│运算符│ ( │ ) │ +,- │ * ,/ │ ~ │ ~ │
├───┼───┼───┼─────┼──────┼───┼───┤
│优先数│ 0 │ 1 │ 2 │ 3 │ 4 │ 5 │
└───┴───┴───┴─────┴──────┴───┴───┘
1.若输入是运算量,则将该运算量输出;
2.若是左括号“(”,则将该符号的优先数压入设置的运算符堆栈e[p]中去;
3.输入运算符优先数是2,3,4,5时,如果栈空,则将运算符的优先数进栈。如果栈不空,则将它与栈顶元素进行比较,倘若优先数大于栈顶元素的优先数,则进栈;小于顶元的,则顶元退栈并输出该运算符,然后再继续比较,直到大于顶元或栈空时进栈;
4.若是右括号“)”,同时栈顶元又为左括号“(”,则栈顶元退栈,并抹去右括号“)”.否则转3处理;
5.输入完而栈非空,则将栈内内容逐一退栈并输出。所有输出的结果就为后缀表达式。
过程中用到的相关数据结构如下:
type arraydata = array[1..100] of string[20];
const fh:array[1..8] of string[1]
=('(',')','+','-','*','/','~','︿');
b:array[1..8] of byte =(0,1,2,2,3,3,4,5);
var d: arraydata; {存储运算量及运算符号}
i,j,m,k: byte;
[过程程序]
procedure hzbds(var d: arraydata; var m: byte );
var: array [ 1'-. 100 ] of byte;
i,p,k ,bi:byte; bl: boolean;
begin
p:=O;k:=1;bj:=0;
while k<=m do
begin
if ___(1)___ then
begin
p:=p+1;e[p]:=1
end
else begin
for i:=2 to 8 do
if ___(2)___ then
begin
b1:= true;
repeat
if ___(3)___ then
begin
p:= p+1 ;e[p]:=i;bj:= 1 ;b1:= false
end
else if ____(4)___ then
if e[p] < >1 then
begin
p:=p+1;e[p]:=i;bj:=1;b1:=false
end
else if d[k] < >')' then
begin
p:=p+1;e[p]:=i;bj:=1;b1:=false
end
else begin
___(5)___;bj:= 1 ;b1:= false;
end
else begin
write(fh[e[p]] ,' ') ;p:=p-1
end;
until b1 = false;
end
if ___(6)___ then write(d[k] ,' ') else bj:=0;
end;
k:=k+1
end
b1:= true;
repeat
if p=0 then b1:= false
else begin
___(7)___;p:=p-1;
end
until b1 = false;
writeln;
end;
信息学初赛模拟试题(1)
(pascal语言)限时2小时完成,满分100分
一、选择题:(共20小题,1-15小题为单选题,每题1分;16-20小题为多选题,每题2分。共25分)
1.对存储器按字节进行编址,若某存储器芯片共有10根地址线的引脚,则该存储器芯片的存储容量为( )。
(A) 512B (B) 1KB (C) 2KB (D)4KB (E)8KB
2.在待排序的数据表已经为有序时,下列排序算法中花费时间反而多的是( )。
(A)堆排序 (B)希尔排序 (C)冒泡排序 (D)快速排序 (E)二分排序
3.某数列有1000个各不相同的单元,由低至高按序排列,现要对该数列进行二分法检索,在最坏的情况下,需要检索( )单元。
(A)1000 (B)10 (C)100 (D)500 (E) 300
4.已知数组a中,每个元素a[i,j]在存储时要占3个字节,设i从1变化到8,j从1变化到10,分配内存实是从地址sa开始连续按行存储分配的。试问:a[5,8]的起始地址为( )。
(A)sa+141 (B)sa+180 (C)sa+222 (D)sa+225 (E)sa+155
5.在pascal语言过程调用时,数值形参得到的是实际参数的( )。
(A) 数值 (B) 地址 (C)值 (D)变量 (E)以上都不是
6.一个24*24点阵的汉字字形信息所占的字节数为( )。
(A) 2 (B) 8 (C) 24 (D) 32 (E) 72
7. 在微机系统中,最基本的输入输出模块BIOS存放在( ) 中。
(A) RAM (B) ROM (C) 硬盘 (D)寄存器 (E)控制器
8. 十进制算术表达式:3*512+5*64+2*8+1的运算中,用二进制表示为( )。
(A)1011010001 (B) 10110100011 (C) 11101010001 (D) 11110100011 (E)111000
9.设栈S的初始状态为空,现对序列{1,2,3,4,5}在栈S上,依次进行如下操作(从元素1开始,出栈后不再进栈):进栈,出栈,进栈,进栈,出栈,出栈。试问出栈的元素序列是( )。
(A){1,2,3} B) {1,3,2} C) {3,2,1} D) {2,3,1} (E)以上都不对
10.E-mail邮件本质上是一个( )
 (A)文件  (B)电报  (C)电话  (D)传真 (E)电讯
11.一棵二叉树的高度为h,所有结点的度为0,或为2,则此树最少有( )个结点
 (A)2h-1  (B)2h-1  (C)2h+1  (D)h+1 (E)h*h+1
12.无向图G=(V,E),其中V={a,b,c,d,e,f}
E={(a,b),(a,e),(a,c),(b,e),(c,f),(f,d),(e,d)}对该图进行深度优先遍历,得到的顶点序列正确的是( )
(A)a,b,e,c,d,f (B)a,c,f,e,b,d (C)a,e,b,c,f,d (D)a,b,e,d,f,c (E)以上都不对
13.pascal 编译程序是( )
(A). 把pascal 源程序转换成可运行的EXE文件的程序
(B). 把pascal 源程序转换成等价的目标码的程序
(C). 生成和修改一个pascal语言源程序的等程序
(D). 把pascal的目标码程序转换成可运行的EXE文件的程序
(E). 生成一个等价的汇编程序
14. 将三封信投到4个邮筒,最多的投法有( )
(A). 种 (B). 种 (C). 种 (D).34种 E.
15. 电子信函(电子邮件)的特点之一是( )。
(A).比邮政信函,电报,电话,传真都更快
(B).在通信双方的计算机之间建立其直接的通信线路后即可快速传递数字信息
(C).采用存储-转发方式在网络上逐步传递信息,不象电话那样直接、及时,但费用低廉
(D).在通信双方的计算机都开机工作的情况下即可快速传递数字信息
16. 以下属于多媒体硬件的是( )
(A).主机 (B).光驱 (C).声卡 (D). 音箱 (E). 超级解霸
17. 正确的二维数组类型说明是(  )
type ar2=array[1..5,5..1] of integer;
type ar2=array[1..5] of array[5.1] of integer;
type ar2=array[1..5,1..5] of integer;
    (D)type ar2=array[1..5] of array[1..5] of integer
(E)type ar2=array[1..5,1..5] of 0..1
18.下列属于信息处理的是( )
(A)信息加工 (B)信息分类 (C)信息技术 (D)信息采集 (E)信息存储
19.在windows中,最小化一个应用程序窗口后,该程序将( )。
(A)被终止执行 (B) 被暂停执行 (C)被转入后台 (D)继续执行 (E)以上答案都不对
20. 下面的常量说明中,正确的是( )
(A)CONST (B)、CONST (C)、CONST (D)、CONST (E)CONST
t = true b, C = 45 M = 100,15 N = 1 OR 2 a= ’A’
二、问题求解:(第1小题5分,第2-3小题各4分,共13分)
[问题1]: 在所有三位数中,各位数字从高位到低位顺次减小的数共有 个。
[问题2]:"银条"
一位银矿勘探员无力预付3月份的房租。他有一根长31英寸的纯银条,因此他和女房东达成如下协议。他说,他将把银条切成小段。3月份的第一天,他给女房东1英寸长的一段,然后每天给她增加1英寸,以此作为抵押。勘探员预期到3月份的最后一天,他能全数付清租金,而届时女房东将把银条小段全部还给他。3月份有31天,一种办法是把银条切成31段,每段长1英寸。可是这处花很多功夫。勘探员希望既履行协议,又能使银条的分段数目尽量减少。例如,他可以第一天给女房东1英寸的一段,第二天再给1英寸的一段,第三开他取回这两段1英寸的而给她3英寸的一段。假设银条的各段是按照这种方式来回倒换的话,勘探员至少需要把他的银条切成______段?
[问题3]:"换不开的钞票"
钱柜里有1.15美分,一位顾客提出:把1美元的钞票换成硬币,但出纳小姐说换不开,后来这位顾客提出:把50美分的钞票换成硬币,但出纳小姐又说换不开,而实际上,出纳小姐也无法把25美分、10美分、5美分的钞票换成硬币。请问钱柜里到底有哪些硬币?他们分别有多少枚?
答:_________________。
三、写出程序的运行结果:(每小题6分,共30分)
1. program text1;
const n=6;m=3;
var i,j,k:integer;
begin
for i:=-n to n do
begin
k:=n-abs(i);
write(' ': 39-k);
for j:=-k to k do
if abs(j)>k-m
then write(n-(i+n)div 2)
else write(' ');
writeln;
end;
end.
输出的结果为:
2. PROGAM text2;
VAR a:ARRAY[1..10] OF Char;
k:Integer; ch:Char;
BEGIN
FOR k:=1 TO 10 DO a[k]:=Chr(Ord('A')+k);
FOR k:=1 TO 10 DO
BEGIN
ch:=a[k];
a[k]:=a[11-k];
a[11-k]:=ch;
END;
FOR k:=1 TO 10 DO Write(a[k]);
Writeln
END.
输出的结果为:
3. program text3(input,output);
Var m,n,p:integer;
x:real;
procedure mm(var m:integer;x:real);
var n:integer;
begin
m:=m+1;
n:=m+1;
x:=n*3;
p:=n;
end;
begin
m:=8;n:=5;p:=3;x:=1.0;
mm(n,x);
writeln (m:5,n:5,p:5,x:6:1);
end.
输出的结果为:
4. program text4;
const n=5;
type ary=array[0..n-1,0..n-1]of integer;
var a:ary;i,j,k:integer;
begin
 for i:=0 to n-1 do
for j:=0 to n-1 do a[i,j]:=0;
k:=1;
  for i:=1 to n do
  for j:=n-1 downto i do
    begin
     a[j,j-i]:=k;
     k:=k+1;
   end;
   for i:=0 to n-1 do
begin 
  for j:=0 to n-1 do
write(a[I,j]:4);
writeln;
end;
  end.
  输出的结果为:
5.program text5(input,output);
var ch:char;
i,n,sum:integer;
begin sum:=0;
read(ch);
case ch of
 'A':for i:=4 to 6 do
   begin
     read(n):
     sum:=sum+n
   end;
 'B':begin read(n);
     for i:=1 to n do
      begin read(n);sum:=sum+n end;
     end;
 'C':repeat
  read(n);sum:=sum+n
  until sum>10;
 'D':begin read(n);
     while n<=3 do
       begin sum:=sum+n;read(n) end
     end
 end; writeln(sum:4)
end.
当程序运行
输入 A 4 1 2 3 4 5 6 7 8 9时,其输出为_____________。
(2) 输入 B 4 1 2 3 4 5 6 7 8 9时,其输出为_____________。
(3) 输入 C 4 1 2 3 4 5 6 7 8 9时,其输出为_____________。
(4) 输入 D 4 1 2 3 4 5 6 7 8 9时,其输出为_____________。
四、完善程序(第1题每空2分第2、3题每空3分,共32分)
第1题 孪生素数是指两个相差为2的素数,例如:3和5,5和7,11和13等。
下面程序可输出15对孪生素数,其中函数q判断整数a是否为素数。
program p(output);
var k,n:integer
function q (a:integer):booklean;
var k:integer;
flag:boolean;
begin
flag:___(1)____
k:=2
___(2)____ (k<=a div 2) and flag do
if a mod k=0 then ______(3)_______
else
k:=k+1
q:=flag
end;
begin
n:=0;
k:=2;
repeat
if q(k) and ___(4)___ then
begin
n:=n+1;
writeln(k,k+2)
end;
k:=K+1
until n=5
end.
第二题 已知有类型arr=array[1..16] of string; arr型数组a中存放着从第1届到第16届足球世界杯冠军国家的名字,下面的函数可求出历界世界杯比赛共有几个国家曾获得过世界杯冠军,请填空完成。
Function text2(a:arr):integer;
var k,j,s:integer;
mult:boolean;
begin
___(5)___;
for j:=2 to 16 do
begin
k:=1;
mult:=false;
while not mult and ___(6)___ do
if ___(7)__ then mult:=ture
else k:=k+1;
if not mult then s:=___(8)___
end;
text2:=s
end;
第三题 Fibonacci(裴波那契)数列的规律是:前2个数均为1,从第3个数开始每个数等于它前面两个数之和,即:1,1,2,3,5,8,13,21,34,55,89,144,233,377,...。已知任意一个大于0的整数可以表示为若干个互不相同的fibonacci之数和。
例如:121=89+21+8+3
下面的程序是由键盘输入一个正整数n,输出组成n的互不相同的fibonacci数。
例如:若输入121
则输入121=+89+21+8+3
本程序的算法如下:(n=121为例)
1)寻找小于或等于n的最大的fibonacci数a(例如89),并以a作为组成n的一个数输出。
2)若n≠a则以n-a作为新的任意正整数(例如32),重复步骤1.若n=a,则结束。程序中的函数find返回小于或等于n的最大的fibonacci数。
program text3(input,output);
var n:integer;
function find(n:integer):integer;
var a,b,c:integer;
begin
a:=1; b:=1;
repeat
c:=___(9)___; a:=b;b:=c;
until b>=n;
if b=n then find:=___(10)___
else find:=___(11)___
end;
procedure p(n:integer);
var a:integer;
begin
a:=find(n); write('+',a:4);
if ap ___(12)___
end;
begin
readln(n);
write(n:5,'=');
p(n);
writeln
end.
信息学竞赛初赛模拟试题(2)
(初中组PASCAL语言,两小时完成)
选择题:(选出每题正确的一个答案代码,填在横线上,每题1.5分,共30分)
1、执行下列二进制算术加运算11001001+00100111( )。
A. 11101111 B. 11110000 C. 00000001 D. 10100010
2、假设a1,a2,a3是布尔变量,且值均为True,则下列表达式中值为False的是______
A. NOT a1 AND NOT a2 B. a1 OR a2 AND a3
C. (NOT a1 OR a2)AND (a2 OR a3) D. False OR a1 AND a2 OR NOT a3
3、若一个问题的求解既可以用递归算法,也可以用递推算法,则往往用_____算法。
A.先递归后递推 B. 先递推后递归 C.递归 D.递推
4、表达式8 MOD (2*(5-3*(4*(5 DIV 2))DIV 10))的值是_____
A. 0 B. 1 C. 2 D. 3
5、贪婪法是一种______的算法。
A.不求最优,只求满意 B.只求最优
C.求取全部可行解 D.求取全部最优解
6、称一种语言为低级程序语言是由于它_____。
A.离机器特性近 B.离自然语言近
C.编程难度低 D.通用性强
7、排序方法中,从未排序序列中依次取出元素与已排序序列(初始时为空)中的元素作比较,将其放入已排序序列的正确位置上的方法,称为_____.
A. 归并排序 B. 二分法排序 C. 冒泡排序 D.插入排序
8、若进栈序列为3,5,7,9,进栈过程中可以出栈,则_____不可能是一个出栈序列。
A. 7,5,3,9 B. 9,7,5,3 C.7,5,9,3 D. 9,5,7,3
9、中缀表达式(a-b)*(cd)的后缀表达式是_____.
A. abcd*- B. ab-cd C. ab-*cd D. a-bcd *
10、字符A、B、C依次进入一个栈,按出栈的先后顺序组成不同的字符串,至多可以组成多少个不同的字符串?_____
A. 5 B. 4 C. 6 D. 1
11、一个字长的二进制位数是_____
A.8 B.16 C.32 D.随计算机系统而不同的
12、当a=1,b=3,c=5,d=4时,执行下面一段程序后,x的值为_____
if(a else if(a if(b else x=3;
else x=6;
else x=7;
A. 1 B.2 C. 3 D. 6
13、若一个存储器的周期为200ns,且每个周期可访问4个字节,则该存储器带宽为____bit/s。
A.20M B.40M C.80M D.160M
14、在WWW页面访问时,浏览器通过网络与该 IP地址处的WEB服务器的_____服务端口间建立一条TCP连接。
A. HTML B. HTTP C. SMTP D. DNS
15、MIDI是一种数字音乐的国际标准,MIDI文件存储的____________。
A.不是乐谱而是波形 B.不是波形而指令序列
C.不是指令序列而是波形 D.不是指令序列而是乐谱
16、已知公式:
2 (x=0)
fun(x)= 1 (x=1)
fun(x-1)+x*fun(x-2)(x>1)
则fun(4)的值是_______
A.25 B.30 C.33 D. 28
17、在完全二叉树中,若一个结点是叶结点,则它没_____
A. 左子结点 B. 右子结点
C. 左子结点和右子结点 D. 左子结点、右子结点和兄弟结点
18、一棵含有101个结点的完全二叉树存储在数组A[1..101]中,对1≤k≤101,若 A[k]是叶子结点,则
k的最小值是______。
51 B. 50 C. 49 D. 48
19、已知数组A中,每个元素A[I,J]在存储时要占3个字节,设I从0变化到8,J从1变化到10,分配内存时是从地址SB开始连续按行分配的.试问:A[4,8]的起始地址为_____.
A. SB+141 B. SB+180 C. SB+142 D. SB+181
20、下面关于图的存储的叙述中正确的是______。
A. 用相邻矩阵法存储图,占用的存储空间大小只与图中结点个数有关,而与边数无关。
B. 用相邻矩阵法存储图,占用的存储空间大小只与图中边数有关,而与结点个数无关。
C. 用邻接表法存储图,占用的存储空间大小只与图中结点个数有关,而与边数无关。
D. 用邻接表法存储图,占用的存储空间大小只与图中边数有关,而与结点个数无关。
二、问题解答:(4+6=10分)
将一支铅笔、一枝原子笔和一个橡皮擦分别放入A、B、C三位女孩的笔盒中,每个笔盒只能放一种文具,且三个笔盒内放的文具都不相同。下列三句叙述中只有一句为真,其余二句为假。试问哪一句为真?_____
①A的笔盒中放的是铅笔。
②B的笔盒中没有铅笔。
③C的笔盒中没有橡皮擦。
小娟喜欢收集布偶,她将红、蓝、黄色的趴趴熊、kitty猫、狗布偶各1只(共9只)排成三行三列的方阵,然后请她的北北来猜。小娟提示说:
①红色的动物都在第一列。
②黄色的动物都不在第三列。
③kitty猫只能在四个角或正中间。
④趴趴熊只能在第一行最上面二个位置或在第三行最下面一个位置。
第二行最下面一个位置放的是_______颜色的______布偶。
三、看程序写结果:(8+10+12=30分)
1.var x,y:integer;
function gcd(x,y:integer):integer;
var r:integer;
begin
repeat
r:=x mod y;
x:=y;
y:=r;
until r=0;
gcd:=x;
end;
begin
x:=80;y:=98;
writeln(x*y div gcd(x,y));
end.
输出:
2. const n=12;
var i,j:integer;
list:array[0..n] of integer;
begin
for i:=1 to n do read(list[i]);
for i:=2 to n do
begin
list[0]:=list[i];
j:=i-1;
while list[0]begin
list[j+1]:=list[j];
dec(j);
end;
list[j+1]:=list[0];
end;
for i:=1 to n do write(list[i]:5);
end.
输入:67 98 7823 2332 2323 64 90 -34 121 -98 22 67
输出:
3. var i,j,k,n:integer;
a:array[1..100,1..100] of integer;
begin
readln(n);
k:=1;
i:=1;j:=1;a[i,j]:=1;
while kbegin
if (i=1) and (j mod 2=1) then inc(j)
else if (j=1) and (i mod 2=0) then inc(i)
else if (i+j) mod 2=0 then begin dec(i);inc(j);end
else if (i+j) mod 2=1 then begin inc(i);dec(j);end;
inc(k);a[i,j]:=k;
end;
writeln(i,'/',j);
end.
输入:1999
输出:
四、程序填空:(12+18=30分)
1、一个数如果正好等于其因子之和,就称其为“完数”。例如6的因子是1,2,3,并且6=1+2+3,所以6是一个“完数”。下面的程序可以输出2──n之间的所有完数之和。其中n为2~1000之间的任意整数。请将程序填写完全。
PROGRAM bs1;
VAR a,n,s:Integer;
FUNCTION func(n:Integer):Boolean;
VAR s,k:Integer;
BEGIN
s:=0;
FOR k:=1 TO ① DO
IF n MOD k=0 THEN s:= ② ;
IF ③ THEN func:=True
ELSE func:=False
END;

BEGIN
s:=0;Readln(n);
FOR a:=2 TO n DO
IF func ④ THEN s:=s+a;
Writeln(s)
END.
2.本程序的功能是将中缀表示的算术表达式转换成后缀表示。如中缀表达式(A-(B*C+D)*E)/(F+G)的后缀表示为ABC*D+E*-FG+/
为了方便,假定变量名为单个英语字母,运算符只有+-×/(均为双目运算符,左结合),并假定所提供的算术表达式非空且语法是正确的。另外,中缀表示形式中无空格符,但整个算术表达式以空格符结束。各数组意义如下:
POLISH[] 存储其后缀表示;
s[] 是一个后进先出栈。
函数 PRIOR(CHAR)返回符号CHAR的优先级,各符号的优先级如下表示:
CHAR PRIOR(CHAR)
* / 4
+ - 3
( 2
) 1
label 10;
var
input:string;
polish,s:array[1..100] of char;
k,p,i:integer;
function prior(ch:char) : integer;
begin
if (ch='*') or (ch='/') then prior:=4;
if (ch='+') or (ch='-') then prior:=3;
if ch='(' then prior:=2;
if ch=')' then prior:=1;
end;
procedure a;
begin
① ;
② ;
end;
procedure b;
begin
③ ;
④ ;
⑤ ;
end;
begin
input:='(A-(B*C+D)*E)/(F+G)';
k:=0;p:=0;i:=1;
while i<=length(input) do
begin
if (input[i]='+') or (input[i]='-') or (input[i]='*') or (input[i]='/') then
begin
while p<>0 do
begin
if ⑥ then b else goto 10 ;
end;
10: a;
end
else if input[i]='(' then
begin
a;
end
else if input[i]=')' then
begin
while s[p]<>'(' do b;
p:=p-1;
end
else
begin
k:=k+1;
polish[k]:=input[i];
end;
i:=i+1;
end;
while p<>0 do b;
writeln(polish);
end.
2、program t2;
var
a:array[0..8] of char;
i: integer;
begin
for i:= 1 to 8 do a[i]:=char(i * 2 +ord('A'));
for i:= 1 to 4 do begin
a[0]:=a[i];
a[i]:=a[9-i];
a[9-i]:=a[0];
end;
for i:= 1 to 8 do write(a[i]);
writeln;
end.
输出:______
4、program t4;
var
a,d:array[1..100] of integer;
n ,i ,j ,k,x ,s :integer;
begin
n:=5;a[1]:=1;d[1]:=1;
for i:=1 to n do
begin
s:=i+1;x:=0;
for j:=1 to n+1-i do
begin
k:=s+x;x:=x+1;a[j+1]:=a[j]+k;
write(a[j],' ');
end;
writeln('...');
d[i+1]:=d[i]+i;a[1]:=d[i+1];
end;
end.
输出:_________
6、program t6;
const a: array[1..14] of longint =(94,32,40,90,99,80,46,21,69,28,64,73,85,54);
var
i, j, k, m,left, right, temp: longint;
begin
m:=8; left:= 1; right:= 14;
while left < right do
begin
k:=a[m]; i:=left; j:=right;
repeat
while k < a[j] do j:=j-1;
while k > a[i] do i:=i+1;
if i <= j then
begin
temp:=a[i]; a[i]:=a[j];
a[j]:=temp; i:=i+1; j:=j -1;
end
until i > j;
if j < m then left:=i;
if i > m then right:=j
end;
writeln(a[m]);
end.
输出:_______
8、program t8;
var
m ,n,s: longint;
procedure pl(n: longint);
begin
if n< >0 then
begin
pl(n div 2);
s:=(s*2+n mod 2 *m) mod 1023
end
end;
begin
m:=2002; n:=5871;
s:=0; pl(n); writeln(s);
end.
输出:_______

展开更多......

收起↑

资源预览