1.数组面积的定义:(限定数组头尾不为0) 设有一个数组C=(4,8,12,0,6) 则C的面积为:
1 Sc=(4+8)/2 + (8+12)/2 + 12/2 + 6/2
也就是说,Sc=各梯形面积之和(其中梯 8 6 4 形的高约定为1,三角形作为梯形的特殊情况
1 1 1 1 处理)。
又如D=(12, 24, 6)时,其面积的定义为Sd=(12+24)/2 + (24+6)/2
24
12 6
1 1
2.数组错位相加的定义
设有2个正整数的数组a,b,长度为n,当n=5时: a=(34,26,15,44,12) b=(23,46,4,0,18) 对a、b进行错位相加,可能有下列情况 34 26 15 44 12
+) 23 46 4 0 18 34 26 15 44 12 23 46 4 0 18 或:
34 26 15 44 12
+) 23 46 4 0 18 - 34 26 15 44 35 46 4 0 18 或:
34 26 15 44 12
+) 23 46 4 0 18 34 26 15 67 58 4 0 18 或:?? 最后有:
34 26 15 44 12 +) 23 46 4 0 18 - 23 46 4 0 18 34 26 15 44 12 可以看到:由于错位不同,相加的结果也不同。
程序要求:找出一个错位相加的方案,使得输出的数组面积为最大。 [算法提要]: 设a,b的长度为10,用a,b: array[1..10] of integer表示,其结果用数组C,D:
array[1..30] of integer表示。
错位相加的过程可以从开始不重叠,然后逐步重叠,再到最后的不重叠。 梯形面积的计算公式为:(上底+下底)×高÷2 其中由于约定高为1,故可写为(上底+下底)÷2。 程序: n = 10;
…… Function sea : real; {计算数组C面积}
5
Begin J1 := 1;
While _______①______ do j1 := j1 + 1; ENDWHILE;
If j1 = 3 * n then sea := 0 Else begin
J2 := 3 * n;
While _______②______ do j2 := j2 - 1;
If j1 = j2 then sea := 0 Else begin
J3 := c[j1] + c[j2];
For j4 := j1 + 1 to j2 - 1 do INC(j3,c[j4]*2); ENDFOR; Sea := j3 / 2 end ENDIF; End;
//主程序//
For i := 1 to n do read(a[I]); endfor; For j := 1 to n do read(b[j]); endfor; __________③____________; for i := 1 to 2 * n + 1 do
for j := 1 to 3 * n do ________④__________ endfor; for j := 1 to n do c[j + n] := a[j] endfor; for j := 1 to n do
_________⑤__________; endfor; p := sea;
if p > s then begin d := c; s := p end; endif; endfor;
for I := 1 to 3 * n do write(d[I],' '); endfor; write(s);
End. //主程序结束//
6
NOI’95 “同创杯”全国青少年信息学(计算机)奥林匹克竞赛
分区联赛初赛试题(初中组) 试题参考答案
一、 基础题:共34分
<1> 本题共4分
显示结果不相同,③和④比①多出一个文件目录。
<2> 本题共5分
所表示的公式是:
E=1+X/1!+ X2/2!+ X3/3!+??+ X10/10!
<3> 本题共7分
列出的算法是: K:=0
FOR i:=0 TO 10 DO
K:=K+(50-I*5) DIV 2+1; ENDFOR;
<4> 本题共10分
(1)k和i,j之间的关系表示为:4% k:=(i-1)*i/2+j
(2)给定k值后,决定相应的i,j值的算法为:6%
j:=k; i:=1;
While j>i do j:=j-I; i:=i+1; Endwhile;
<5> 本题共8分
四色球在盒子中放置的情况为:4%
1 2 3 4 黑 红 白 黄 推理过程是:4%
假定: 黑为1√ ?黄为2× ?黑为2× ?白为3√ ?红为2√ ?白为4× ?黄为4√
二、根据题日要求,补充完善以下伪代码程序:(共66分)
<1> 共10分(每空二分)
① for i:=10 to 99 do
7
② x:=i mod 10; ③ y:=i div 10; ④ If (i+j)<100 ⑤ if k mod 6=0
<2> 共12分(每空三分)
① s:=0; ② s:=s+a[j]; ③ a[i]:=s+1
④ t:=t+a[i]; 或t:=t*2+1
<3> 共24分(每空四分)
① for i:=2 to num-1 do 或for i:=2 to sqrt(num)do ② if b[i] <>0 ③ if b[i]<>0
④ for i1:=i+1 to num do
⑤ delta:=i1-i; 或delta=b[i1]-b[i]
⑥ while (i1+k
<4> 共20分(每空四分)
① c[j1]=0 and j1<3*n ② c[j2]=0 and j2>j1 ③ s:=0; ④ c[j]:=0;
⑤ c[i+j-1]:=c[i+j-1]+b[j]
8