广东省汕头市金山中学高一信息技术 历年NOIP初赛试题15
( Pascal 语言 竞赛用时:2小时)
●● 全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效 ●●
一.基础部份:
〈1〉WPS 是属于 类软件; FOXBASE 是属于 类软件。
用FOXBASE的命令: CREATE GZB,在磁盘中生成的是 文件。 〈2〉在MS DOS的根目录中,有如下文件: TIME.EXE TIME.COM TIME.BAT
试问:C: \\ > TIME〈回车〉 执行的是什么命令?
〈3〉已知 ASCII码表中的大写字母后有6个其他字符, 接着便是小写字母。现已知:
A字母的ASCII码为 (41)16 {表示十六进制数41},试写出如下字母用十进制表示的ASCII码:
G-→( )10 b -→( )10 t -→( )10
〈4〉 设数组A [ 10..100 , 20..100 ] 以行优先的方式顺序存储,每个元素占4个字
节,且已知A [ 10 , 20 ] 的地址为1000,则A [ 50 , 90 ] 的地址是 。
〈5〉一个汉字的机内码目前通常用二个字节来表示:第一个字节是区位码的区号加 (160)10; 第二个字节是区位码的位码加 (160)10 。
已知:汉字“却”的区位码是4020,试写出机内码两个字节的二进制的代码: □□□□□□□□,□□□□□□□□
〈6〉下图中用点表示城市,点与点之间的联线表示城市间的道路: D C
E F A B
试问:① 能否找出一条从A城市出发,经过图中所有道路一次后又回到
出发点的通路来?
② 能否从A出发,找出去每个城市且只去一次的通路来?
若能,则写出通路,否则说明理由。 〈7〉为了便于处理表达式,常常将普通表达式(称为中缀表示)转换为前缀 {运算符在
前,如X/Y写为 / XY} 和后缀 {运算符在后,如X / Y写为X Y / } 的表达形式。 在这样的表示中可以不用括号即可确定求值的顺序,如: (P+Q)*(R-S)→ *+PQ-RS 或→ RQ+RS-* ① 试将下面的表达式改写成前缀与后缀的表示形式:
〈a〉A+B*C/ D 〈b〉A-C*D+B∧E
② 试将下面的前缀表示还原成中缀的表示形式,同时写出后缀表示:
+△A*B△C {前缀式中△表示一元运算符取负号,如△A表示 (-A)} 〈8〉一个将角编了号的正三角形可以进行如下二种运动:
< a > 沿过顶点1的高h翻转180°,我们将这个运动用字母a来表示:
1 1
h h a
2 3 3 2
< b > 沿过三角形的外心,垂直于三角形所在平面的有向轴L (注意:三角形翻转时
L轴也随着翻转的),按右手法则旋转120°(右手法则是指用右手大拇指指向L轴的方向,由其余四指决定旋转方向的法则),我们将这样的运动用字母b来表示:
L 3 L 1 h h b
2 3 1 2
如果将a,b作为运算对象,并将两个运动连续进行看作一种运算(这里不妨也称为乘法),则对图一的三角形而言,aa的结果便成为:
1 2
bb 2 3 3 1
若将运动前后的三角形状态简称为元素,那么三角形状态就可与运动的表达式关联
起来。据此,请回答如下问题:
① 从图一的三角形的原始状态出发,可以运动出多少种不同状态的三角形,试写
出最简单的运算表达式(借助于a , b与乘法运算); ② 这样定义的乘法运算是否符合交换律与结合律?
③ 如果将从三角形的某种状态运动回到原始状态称之为该元素的逆元素,例如:
1 b
3 bb
1 2 3 1 –1
2 =b
-1
2 3 ∴ bb的逆元素为b,可表示为 (bb)
-1
试求: (1) a = (2) (ab)=
(3) ((aa) a) = (4) b =
-1
-1
二.根据题意,补充完善以下程序:
1.[问题描述]:一个正整数(非素数)可以表示成它的因子(1与其本身除外)的乘积。 例如: 12有因子2 , 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 [ 0 .. 20 ]工作单元。 [程序清单]:
program exp4 ( input , output );
var a : array [ 0..20 , 1..2 ] of integer;
c , b : array [ 0..20] of integer; n , m , i , j , s , k , L : integer;
Begin
readln (n); for i := 1 to 20 do a [ i , 1 ]:= 0; ① ; a [ 0 , 2 ]:=1; j:=0; for i := 2 to n-1 do begin
s := 0; m := n;
while ( m < > 0) and ( m mod i = 0 ) do
begin m := m div i; ② ; end; if ③ then begin
j := j + 1; ④ ; a [ j , 2 ] := ⑤ ;
end end;
for i := 0 to j do b [ j ] := 0; while b[ 0 ] = 0 do begin
k := j;
while ⑥ do k := k -1; b [ k ]:= b [ k ] + 1;
for L:= ⑦ do b [ L ]:= 0; s := 1;
for i := 1 to j do
if b [ i ] < > 0 then for L := 1 to b [ i ] do ⑧ ;
if s = n then begin
for i := 1 to j do c [ i ]:= b [ i ]; write ( ‘(’ ); m := 1; 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 , 1 ] )
else begin
write ( a [ i , 1 ] , ‘ * ’ );
c [ i ] := c [ i ] – 1; end;
end;
writeln ( ‘)’ ); end
end; End.
2.[问题描述]:给出一个凸多边形,可以取得若干个内接三角形,同时约定内接三角形
必须有一条边(仅能有一条边)与凸多边形的边相重合,例如:下面的5边形中,可能有的内接三角形有5种:
A
△ACD , △BDE , △CEA ,
△DAB , △EBC B E
D C 问题: 当依次给出凸多边形的每个顶点的2个坐标之后,找出一个面积最大的内接
三角形,输出该三角形的面积与三个顶点的坐标。
[算法说明]:凸多边形的每个顶点用一对坐标(x , y)表示;
用数组p:array [1..n] of point; 存储输入的顶点坐标; 同时编制一个由三角形的三个顶点计算其面积的函数SEA。
[程序清单]:
program exp5 ( input , output ); 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; smax : real; function sea ( p1, p2 , p3 : point ) : real;
var s1 , s2 , s3 , s4 : 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:= ① ; 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 ② for i:=1 to n do for ③ do
if ④ then begin
smax := sea (p[ i ] , p[ i+1] , p[ j ]);
q1:= p[ i ]; q2:= ⑤ ; q2:= p[ j ] end;
writeln ( smax , q1.x , q1.y , q2.x , q2.y , q3.x , q3.y ) End.
3.[问题描述]:拼图形:边长为1的正方形面积为1,从边长为1的正方形出发可以用2
个边长为1的正方形拼成面积为2的长方形:
同时约定:
1.边长对应相等的长方形被认为是相同的;(所有左边的两个面积为2的长方形只看作一个长方形);
2.长度相等的边才能拼接,且两个边必须重合;
从面积为2的长方形出发,用2个面积为2的长方形可拼出面积为4的长方形(包
括正方形),拼法如下:
同样再从面积为4的长方形(包括正方形)出发,可以拼成面积为8的长方形,拼法如下:
可以按上面的方法继续拼下去。
问题:输入一个数N,输出面积不超过N的所有可能拼法。例如:当N=20时,输出: (1 ,
1),(2 , 1),(4 , 2),(8 , 2),(16 , 3)即面积为1的拼法1种,面积为2