题目描述
考虑下图1的一个由5*5的正方形(每个单元格是一个小正方形),其中有7个单元格被填充成了黑色,而其余没有填充颜色。
图1 原始图(7个黑色格子)
将这个正方形顺时针旋转90度,然后叠加在原始图1之上得到新正方形图2(含13个黑色格子):
图2 第1次叠加后的效果
原始图1在第1次旋转的基础上再顺时针旋转90度,叠加到图2之上,得到图3所示的正方形(含有19个黑色格子):
图3 第2次叠加后的效果
原始图1在第2次旋转的基础上再顺时针旋转90度,叠加到图3之上,得到图4所示的正方形(含有25个黑色格子):
图4 第3次叠加后的效果
从原始图到第3次叠加结束,正方形中黑色格子数量的变化是从7个,13个,19个,一直到25个。
输入格式
共n+1(n<=25)行;
第一行输入整数n;
接下来n行为n行数据,每行n列数字0或1,组成一个n*n的数字正方形。
输出格式
输出数据共4行,第1行为原方阵中黑色格子的数目;
第2行为原方阵顺时针旋转90度后的新方阵和原方阵的叠加后黑色格子的数目;
第3行为原方阵顺时针旋转90度后的新方阵和原方阵的叠加后黑色格子的数目;
第4行为原方阵顺时针旋转90度后的新方阵和原方阵的叠加后黑色格子的数目。
输入/输出例子1
输入:
5
10100
10001
01100
01000
00000
输出:
7
13
19
25
输入/输出例子2
输入:
4
0000
0100
0010
0001
输出:
3
6
7
8
#include<bits/stdc++.h>
using namespace std;
int a[30][30],b[30][30],c[30][30];
int n;
void sum(){
int s=0;
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
if (a[i][j]==1) s++;
cout<<s<<endl;
}
int main(){
cin>>n;
char ch;
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++){
cin>>ch;
if (ch=='1') a[i][j]=1; else a[i][j]=0;
}
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
b[i][j]=a[i][j];
sum();
for (int t=1;t<4;t++){
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
c[i][j]=b[j][n-i+1];
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
if (c[i][j]==1) a[i][j]=1;
sum();
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
b[i][j]=c[i][j];
}
}
代码