1. 【海岛建设】(2+2+2+2+2+2=10)
牛背群岛是由一大批大小接近的小岛屿组成的,涨潮时群岛中的每个小岛都会有一部分被淹入海水下面(有些特别矮小的小岛甚至整个淹入水下) ,退潮时这些小岛上被淹的部分又能露出了海面。为了打造特色旅游景观,政府计划在每次涨潮时被淹入水下的那些部位安装彩色灯光装置,这样在涨潮时这些部位就会在水下发出光彩夺目的景观。
现在味味已经从测绘公司得到了所有这些小岛的海拔高度, 而且将这些数据进行了量化预处理。作为程序员,味味需要统计所有这些小岛中,量化高度在 2 和 5 之间(包括 2和 5)的小岛数量总共有多少个。
下面是味味编写了一部分的程序,程序先读入牛背群岛所组成的方阵的规模 n(牛背
群岛的各个小岛刚好组成了一个 n*n 的方阵),然后以一个方阵的格式依次读入 n*n 个小岛各自的量化高度(详细可见输入和输出样例) ,程序最后应能输出量化高度不小于 2 并且不大于 5 的所有小岛的总数。
请你帮助味味完成下面的程序。
输入样例:
5
1 2 3 5 2
7 4 2 3 6
2 1 3 6 5
1 1 5 3 4
11 9 1 4 5
输出样例:
15
program test5;
var n,i,j,s:integer;
a:array[1..10,1..100]of integer;
begin
read(n) ;
for i:=1 to n do
begin
for j:=1 to n do read(a[i,j]) ;
readln;
end;
s:=0;
for i:=1 to n do 6
for j:=1 to n do
if (a[i,j]>=2) and ( a[i,j]<=5 )then inc(s) ;
writeln(s);
end.
2. 【扫雷游戏】(3+3+3+3+3+3=18)
Windows 中的扫雷游戏是大家都熟悉的小游戏,今天,味味也设计了一个简易的扫雷
游戏。味味设计的扫雷游戏功能如下:
1.程序一开始会读入扫雷的区域大小 n,表示扫雷区域有 n*n 个小方格组成, 接下来会读入 n 行信息,每行有 n 个整数(每个整数可能是 0, 也可能是 1) ,每两个整数之间用一个空格分隔。其中 0 表示所在位置的小方格内没有地雷, 1 表示所在位置的小方格内有地雷(游戏开始时,扫雷吉尔吉斯中必定包含至少一个地雷) 。
接下来每行输入两个用空格分开的正整数 i 和 j ,每一行的一对 i 和 j 表示用户用鼠标单击扫雷区域中第 i 行第 j 列位置上的小方格(就像我们 windows 中扫雷游戏一样) ,i和 j 表示的位置必定在扫雷区域内。程序每输入一对 i 和 j ,就马上进行相应的处理(就像我们在 windows 中鼠标单击某个小方块就会出现结果一样) 。
2.程序根据读入的一对 i 和 j 的值来对扫雷区域作相应处理,具体的处理规则如下:
(1)如果 i 和 j 表示的小方格内没有地雷、而且也没有被处理过(就是第 i 行第 j列的数值是 0) , 那么将以该小方格为中心的一个正方形区域内所有没有地雷的小方格都赋值为 -1(表示该区域的地砖被掀开) ,当然该正方形指的是在扫雷区域内的有效区域。如果在当前正方形区域内有一个位置号是 i1 和 j1( 注意,i1<>i 并且 j1<>j) 的小方格内恰好有地雷,则此地雷就被顺利扫除,将该位置标记为 -2。如果该正方形区域内某些小方格已经被处理过,则对这些小方格不再做任何处理。
举个例子来说明一下,假如输入信息如下左边所示,那么输出结果就如下右边所示:
(2)如果 i 和 j 表示的小方格已经被处理过(就是第 i 行第 j 列的数值是 -1 或者是-2) ,那么不作任何处理,继续去读取下一行的 i 和 j 的值。
(3)如果 i 和 j 表示的小方格刚好有地雷,并且该小主格没有被处理过(就是第 i行和第 j 列的数值是 1) ,那么表示用户触坜,输出信息“ GAME OVER ” ,程序结束。
3.如果在读入和处理 i 、j 的过程中一直没有触雷,那么就一直按照位置信息处理下去,直到满足下列条件之一,就输出相应信息并结束程序:
(1)读入的 i 和 j 的值都是 0(表示用户不再在某个小方格内单击右键了) ,则输出整个扫雷区域的状态(就是输出处理后来 n 行 n 列的方阵,每行中两个整数之间用一个空格分隔,末尾没有多余空格) ,然后程序结束。
(2)如果某次处理完后,游戏区域内所有的地雷都被扫除了,那么不必再读入一下行的信息,直接输出信息“ YOU ARE WINNER!! ” , 程序结束。
味味不小心把已经编好的程序误删了一些代码,请根据上面的功能要求,帮助味味
把下面的程序补充完整。
说明:
(1)halt 命令的功能是终止(结束)整个程序的运行。
(2)total 变量保存一开始扫雷区中地雷的总数, ok 变量保存当前已经被扫除的地雷总数。
输入样例: 6
0 0 0 0 0 0
0 0 1 0 0 0
1 0 0 0 1 0
0 0 0 0 0 0
0 1 0 0 0 1
0 0 0 0 0 0
1 1
3 4
5 5
4 6
5 2
输出样例 1:
GAME OVER!
输入样例: 5
0 0 1 1 0
1 0 0 0 0
0 0 1 0 1
0 0 0 0 0
0 1 1 0 1
2 2
2 4
4 4
5 5
3 1
0 0
输出样例 2:
-1 -1 -2 -2 -1
-2 -1 -1 -1 -1
-1 -1 -2 -1 -2
0 0 -1 -1 -1
0 1 -2 -1 -2 9
program test6;
var i,j,total,ok,x,y,n:integer;
a:array[1..50,1..50]of integer;
procedure pro_1;
var x,y,k:integer;
begin
for x:= i-1 to i+1 do
for j:=y-1 to y+1 do
if (x>=1) and (y>=1) and (x<=n) and (y<=n) then
begin
if a[x,y]=0 或者 a[x,y]<>1 then a[x,y]=-1;
if a[x,y]=1 then begin a[x,y]:=-2; inc(ok) ;end;
end;
end;
begin {main program 主程序 }
readln(n);
total:=0;ok:=0;
for x:=1 to n do
begin
for y:=1 to n do
begin
read(a[x,y]);
if a[x,y]=1 then total:=total+1;
end;
readln;
end;
readln(i,j) ;
while(i<>0)and (j<>0)do
begin
if a[i,j]=0 then pro_1;
if total=ok then begin writeln( ‘YOU ARE WINNER!! ’);halt;end ;
if a[I,j]=1 then begin writeln( ‘GAME OVER!’);halt;end ;
readln(i,j);
end;
for x=:1 to n do
begin
for y:=1 to n do write(a[x,y], ’ ‘);
writlen;
end;
end.