=a[i,j];
s:
=s+max;
end;
writeln(s);
end.
输入:
12345
691357
111281514
2120181617
输出:
4.
programtest4;
var
i:
integer;
a:
array[1..10]ofchar;
proceduretry(t:
integer);
begin
ift=10thenwrite(a[t])
else
begin
try(t+1);write(a[t]);
end;
end;
begin
fori:
=1to10doread(a[i]);
try
(1);
end.
输入:
123459876a
输出:
四.完善程序(根据问题要求和已有程序,在空格处填入适当的语句或符号,使程序完整。
本题共30分。
)
1.【圣诞礼物】(3+2+2+3+2=12分)
圣诞节到了,圣诞老人打算把一批圣诞礼物装入各种不同颜色的口袋中,然后分发给小朋友们。
现在圣诞老人手中有5个不同礼物和5个不同口袋,圣诞老人的计划是这样的:
(1)先给每个礼物编号,编号分别是1、2、3、4、5;再给5个口袋编号,分别用a[1]、a[2]、a[3]、a[4]、a[5]来表示,其中a[I]的值表示I号口袋中装的礼物的编号。
比如,a[3]=5,表示3号口袋中装的是编号为5的礼物。
(2)任何一个礼物可以装入任何一个口袋中,但每个口袋中有且仅有一个礼物。
也就是说,5个礼物刚好装入5个不同的口袋中。
圣诞老人想知道的是这样的礼物装入口袋的方法一共有多少种,分别怎么装?
他想让你编写一个程序来解决这个问题。
而且,他怕你不理解他的含义,举了一个例子,假如有3个不同的礼物和口袋,那么你的程序应该能输出以下结果:
123
132
213
231
312
321
s=6
上述输出结果中,最后一行表示装袋方法的种数(这里是6种),前面6行是各种不同的装袋方法。
比如,第一行表示1、2、3号口袋分别装的礼物编号是1、2、3;而第3行表示的是1、2、3号口袋分别装的礼物编号是2、1、3。
请你完成下列程序:
programtest6;
var
a:
array[1..5]ofinteger;
i1,i2,i3,i4,i5,j1,j2,j3,j4,j5,s:
integer;
functionf(x,y:
integer):
boolean;
var
k:
integer;
begin
f:
=true;
fork:
=1toxdoif①thenf:
=false;
end;
procedureprint;
var
i:
integer;
begin
fori:
=1to5dowrite(a[i]:
3);writeln;
end;
begin
s:
=②;
fori1:
=1to5do
begin
j1:
=1;③;
fori2:
=1to5do
iff(j1,i2)then
begin
j2:
=2;a[j2]:
=i2;
fori3:
=1to5do
iff(j2,i3)then
begin
j3:
=3;a[j3]:
=i3;
fori4:
=1to5do
iff(j3,i4)then
begin
j4:
=4;a[j4]:
=i4;
fori5:
=1to5do
iff(j4,i5)thenbeginj5:
=5;a[j5]:
=i5;print;④;end;
end;
end;
end;
end;
writeln('s=',⑤);
end.
2.【华容道】(3+3+3+3+3+3=18分)
华容道是取材于我国三国演义的一种小游戏,小王是一个编程爱好者,他就利用课余时间编写了一个华容道的游戏程序。
当然小王的华容道和现实的华容道游戏又有一些区别,小王的华容道游戏是这样设计的:
华容道由5×5的底板和24个大小一样的小正方形板组成。
在每一个小正方形板上印有一个不同的字母(A到X)。
24个方板放入底板后,底板上还有一个空位。
如果一个小方板紧挨着空位,则可以将其移动至空位。
按照这个游戏设计思想,小王开始编写程序,使得程序能根据输入的初始局面(各个小正方形板在华容道中的位置排列)和移动序列之后,输出华容道的最终局面。
问题是小王编写了程序后发现程序不能正确执行,根据他的经验,他觉得错误肯定发生在其中的6个地方(下面程序中标有数字的空格处),于是小王来向你这个编程高手请教,请你告诉小王这6个空格处正确的内容应该是什么。
程序一开始会让使用者输入华容道的初始局面和移动序列,前面5行5列组成华容道的初识局面,第6行表示移动序列。
下面就是某个使用者的输入信息(第3行第2个位置是空位):
TRGSJ
XDOKI
MVLN
WPABE
UQHCF
ARRBBL
上面移动序列中包含了4种不同字母,分别表示了不同的移动方向,这些字母的含义是:
A表示将空位上方的方板移动到空位;B表示将空位下方的方板移动到空位;L表示将空位左方的方板移动到空位;R表示将空位右方的方板移动到空位。
一个正确的华容道程序应在得到上面的输入数据后,输出如下所示的最终局面(第4行第3个位置是空位):
TRGSJ
XOKLT
MDVBN
WPAE
UQHCF
考虑到有些用户可能会输入非法的移动信号,比如当空位在最下面一行时,移动信号为“B”,此时由于下面没有任何小方块了,所以是非法的移动,此时应让程序能输出“NoAnswer”(此时不必输出华容道的最终局面)。
比如,输入数据为:
(第3行第2个位置是空位)
TRGSJ
XDOKI
MVLN
WPABE
UQHCF
LBBB
此时,程序应能正确地输出“NoAnswer”。
下列就是小王编写的程序,请帮助小王完善程序,并把答案书写在答卷纸上。
programTEST5;
var
i1,j1,i2,j2,i,j,k:
integer;
s,x:
char;
a:
array[1..5,1..5]ofchar;
b:
string;
procedureerr;
begin
write('①');halt;
end;
procedureswp(vari1,j1,i2,j2:
integer);
var
t:
char;
t1:
integer;
begin
t:
=a[i1,j1];a[i1,j1]:
=a[i2,j2];a[i2,j2]:
=t;
t1:
=i1;i1:
=i2;i2:
=t1;t1:
=j2;j2:
=j1;j1:
=t1;
end;
begin
fori:
=1to5do
begin
forj:
=1to5do
begin
read(a[i,j]);if②thenbegini1:
=i;j1:
=j;end;
end;
readln;
end;
readln(b);
k:
=length(b);
fori:
=1to③do
begin
if((i1=1)and(b[i]='A'))or((i1=5)and(b[i]='B'))or(④)or((j1=5)and(b[i]='R'))
thenerr;
I2:
=I1;j2:
=j1;
caseb[i]of
'A':
i2:
=i1-1;
'B':
i2:
=⑤;
'L':
j2:
=j1-1;
'R':
j2:
=⑥;
end;
swp(i1,j1,i2,j2);
end;
fori:
=1to5do
begin
forj:
=1to5do
write(a[i,j]);
writeln;
end;
end.