第十四届全国青少年信息技术奥林匹克联赛初赛问题解答
1 B 2 B 3 C 4 A 5 C
6 D 7 A 8 B 9 D 10 B
二、阅读程序中的填空(每空5分,***60分)注:有其他正确答案也可以打分。
标题号为空
1 1 87 68 43 25
2 2 5 0 4 3 2 1
3 3 b - a
4 s = 400
4 5 a(k * i ) = 0
6 a(i) = 1或a(i)
5 7 0
8 393-a * 81-b * 41-c * 29
9分钟& ltx
6 10 b2 = 0
11x/y & lt;& gta1 / b2
12出口DO
三。编程题(***20分)备注:解法不唯一,仅供参考。
分析:
这里有一个解决方案:
(1)首先求n叠牌数的平均值,avg =(x 1+x2+…+xn)/n;
(2)从左向右开始,即从1桩开始,然后右转,直到第N桩。具体分为三种情况:
①如果x 1 & gt;Avg,移动一次,移动的卡数是x1-avg,把多余的卡加到上面的x2上,然后继续x2的讨论;
②如果x1=avg,不动直接进入x2的讨论;
③如果X1
x 1+x2+…+XJ-1 & lt;Avg * (j-1)和x1+x2+…+xj ≥ j * avg。
即第(j-1)堆牌加起来的总数小于平均值,需要从右边的xj开始补。
如果x1+x2+…+xj=avg*j,移动j-1次,转到xj+1的讨论;
如果x 1+x2+…+XJ & gt;Avg*j,然后移动j次,从xj移动到xj+1的卡数为
x1+x2+…+xj - avg*j
源程序:
快速眼动测试3
尺寸x(1000)
输入" n= ",n '输入堆的总数。
平均值= 0
对于i = 1到n '输入每堆牌的具体数量。
输入x(i)
平均值=平均值+ x(i)
接下来我
avg = avg \ n
s = 0: j = 1
一边做一边j & ltn
j1 = 1: s1 = x(j)
DO WHILE s 1 & lt;J1 * avg '从左到右找出要移除的牌堆。
j = j + 1
j1 = j1 + 1
s1 = s1 + x(j)
环
如果s1 = j1 * avg那么‘j 1之前的那堆牌正好可以平分。
s = s + j1 - 1
否则j1中的那堆牌摊平后还有多余的牌。
s = s + j1
X(j+1)= X(J+1)+s 1-J 1 * AVG '多余的牌移到J+1的那一堆。
如果…就会结束
j = j + 1
LOOP ' j & ltn
PRINT " move =s
结束
程序的运行结果是
测试数据1:
8 (***8叠牌)
6 10 9 12 8 1179(输入每堆牌的数量)
移动=5(输出结果)
测试数据2:
4 (***4叠牌)
51 51 51 51(输入每堆牌的数量)
移动=0(输出结果)