三.问题求解(请在空格处填上答案,每空5分,共计10分)
1. 将数组{32, 74, 25, 53, 28, 43, 86, 47}中的元素按从小到大的顺序排列,每次可以交换任
意两个元素,最少需要交换次。
2. 取火柴游戏的规则如下:一堆火柴有N根,A、B两人轮流取出。每人每次可以取1 根或
2 根,最先没有火柴可取的人为败方,另一方为胜方。如果先取者有必胜策略则记为1,
先取者没有必胜策略记为0。当N 分别为100,200,300,400,500 时,先取者有无必
胜策略的标记顺序为(回答应为一个由0 和/或1 组成的字
符串)。
四.阅读程序(共4题,每题8分,共计32 分)
==================PASCAL语言==================
1. var
a, b, c, p, q : integer;
r : array[0..2] of integer;
begin
read(a, b, c);
p := a div b div c;
q := b - c + a + p;
r[0] := a * p div q * q;
r[1] := r[0] * (r[0] - 300);
if (3 * q - p mod 3 <= r[0]) and (r[2] = r[2]) then
r[1] := r[r[0] div p mod 2]
else r[1] := q mod p;
writeln(r[0] - r[1]);
end.
输入:100 7 3
输出:
2. var
a : array [1..50] of integer;
n, i, sum : integer;
procedure work(p, r: integer);
var
i, j, temp : integer;
begin
if p < r then begin
i := p - 1;
for j := p to r - 1 do
if a[j] >= a[r] then begin
inc(i);
temp := a[i]; a[i] := a[j]; a[j] := temp;
end;
temp := a[i + 1]; a[i + 1] := a[r]; a[r] := temp;
work(p, i);
work(i + 2, r);
end;
end;
begin
read(n);
for i := 1 to n do read(a[i]);
work(1, n);
for i := 1 to n - 1 do sum := sum + abs(a[i + 1] - a[i]);
writeln(sum);
end.
输入:10 23 435 12 345 3123 43 456 12 32 -100
输出:
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] 下一页