旋转

来源:互联网 发布:新淘宝口令怎么设置 编辑:程序博客网 时间:2024/04/29 01:50

【题目描述】
考虑下图 1 的一个由 5*5 的正方形(每个单元格是一个小正方形),其中有 7 个单元格被填充成了黑色,而其余没有填充颜色。
这里写图片描述
将这个正方形顺时针旋转 90 度,然后叠加在原始图 1 之上得到新正方形图 2(含 13 个黑色格子):
这里写图片描述
原始图 1 在第 1 次旋转的基础上再顺时针旋转 90 度,叠加到图 2 之上,得到图 3 所示的正方形(含有 19 个黑色格子):
这里写图片描述
原始图 1 在第 2 次旋转的基础上再顺时针旋转 90 度,叠加到图 3 之上,得到图 4 所示的正方形(含有 25 个黑色格子):
这里写图片描述
【输入格式】
输入文件仅包含N+1行。
第一行一个整数N(1≤N≤25)。
接下来N行,每行N个“0”或“1”构成的序列,表示正方形的初始状态。其中“0”表示此处的小正方形式没有填充颜色的,“1”表示此处正方形已经是黑色填充了。
【输出格式】
输出文件共四行。每行包含一个整数,分别表示每次叠加后N*N正方形中黑色格子的数量(其中第一行为原始图中黑色格子的数量)。
【样例输入】
5
10100
10001
01100
01000
00000
【样例输出】
7
13
19
25
【分析】
数据范围令人皆大欢喜。
模拟,几乎没什么要注意的细节。

#include<iostream>#include<string>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];    }}
3 0
原创粉丝点击