旋转

mac2022-06-30  24

【题目描述】 考虑下图 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]; } }

转载于:https://www.cnblogs.com/JRX2015U43/p/6533463.html

最新回复(0)