有色格子数
【问题描述】
在多多参加的益智兴趣课中,老师设置了一个有色格子数的过关益智游戏。老师出示一张有若干个已填色的5X5的正方形( 每个单元格是一个小正方形)。
第1关:请说出5X5的原始图(如图1所示)正方形中有色格子数(含有7个有色格子)。
图1:5X5原始图
第2关:将图1原始图这个正方形顺时针旋转90度,然后叠加在原始图1之上,得到新正方形图2,请说出叠加后的正方形中有色格子数(含有13个有色格子)。
图2:第1次叠加后的效果
第 3 关:将原始图1在第1次旋转的基础上再顺时针旋转90度,叠加到图2之上,得到新正方形图3,请说出叠加后的正方形中有色格子数(含有19个有色格子)。
图3:第2次叠加后的效果
第4关: 将原始图1在第2次旋转的基础上再顺时针旋转90度,叠加到 图3之上,得到新正方形图4,请说出叠加后的正方形中有色格子数(含有25个有色格子)。
图4:第3次叠加后的效果
多多为了快速给出正确的答案;编写了一段程序。
【输入格式】
第一行一个整数n。接下来n行,每行n个“0”或“1”构成的序列,表示正方形的初始状态。其中“0”表示此处的小正方形没有填充颜色的,“1”表示此处正方形已经是填充颜色的。
【输出格式】
输出文件共四行分别为各关中有色格子的数量。
【输入样例】
5
10100
10001
01100
01000
00000
【输出样例】
7
13
19
25
【程序清单】
PROGRAM CX2016P6;
var i,j,n,k,l:longint;
d:char;
a,b,c:array[0..30,0..30] of boolean; //a记录是旋转数组//b记录的是叠加数组
function count:longint;
var i,j,t:longint;
begin
t:=0;
for i:=1 to n do
for j:=1 to n do
if b[i,j]=true then inc(t);
_____count:=t______;
end;
procedure work; //旋转和叠加
var i,j:longint;
begin
for i:=1 to n do
for j:=1 to n do
begin
c[i,j]:=a[i,j];
_____a[i,j]:=false______;
end;
for i:=1 to n do
for j:=1 to n do
if c[i,j]=true then
begin
_____b[j,n-i+1]:=true______;
_____a[j,n-i+1]:=true______;
end;
end;
begin
readln(n);
for i:=1 to n do
begin
for j:=1 to n do
begin
read(d);
if d=1 then b[i,j]:=true else b[i,j]:=false;
a[i,j]:=b[i,j];
end;
readln;
end;
writeln(count);
for i:=1 to 3 do
begin
_____work______;
writeln(count);
end;
end.