今天只打了一个程序,变换矩阵,也就是对矩阵类型的变幻做出判断。这大概算是一个简单的程序意味着我已经能将图形成像了,通过n*n方阵的变换,我已是更加清楚了二维数组。
拿道题的首先我先将题目与之前的题目进行对比,发现与之前的三道题有异曲同工之妙。
1.顺时针旋转
2.逆时针旋转
3.倒置.
于是我对题目作出判断是将图形的变幻进行集合,再判断。集合的过程进行的很顺利,但判断的过程出现了问题。第一次,我用大循环套IF直接对所有可能进行判断,结果是自然。第二次,我通过小循环套IF进行直接判断,虽说失败了,但给了我一个启发——为何不换元之后再进行判断呢?我尝试间接的判断,通过每次对应位置正确的数量来进行修改。按理该是AC可连样例都没过。于是乎,静态查错。果不其然是换元时的元素写反。重写,AC。
然而遗憾的是对于数据排列还是没怎么搞懂,还需多加学习!!!
今天的代码,应该还有更好的。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,x=0,y=0,z=0,h=0;
char a[110][110],b[110][110],c[110][110],e[110][110],d[110][110];
cin>>n;
for(int i=1;i<=n;i++)//第一组数据
{
for(int j=1;j<=n;j++)
cin>>a[i][j];
}
for(int i=1;i<=n;i++)//第二组数据
{
for(int j=1;j<=n;j++)
cin>>d[i][j];
}
for(int i=1;i<=n;i++)//顺时针
{
for(int j=1;j<=n;j++)
{
b[i][j]=a[n-j+1][i];
}
}
for(int i=1;i<=n;i++)//逆时针
{
for(int j=1;j<=n;j++)
{
c[i][j]=a[j][n-i+1];
}
}
for(int i=1;i<=n;i++)//倒置
{
for(int j=1;j<=n;j++)
{
e[i][j]=a[n-i+1][n-j+1];
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(e[i][j]==d[i][j]) x++;
if(b[i][j]==d[i][j]) y++;
if(c[i][j]==d[i][j]) z++;
if(a[i][j]==d[i][j]) h++;
}
}
if(x==n*n) cout<<3;
if(y==n*n) cout<<1;
if(z==n*n) cout<<2;
if(h==n*n) cout<<4;
if(x!=n*n&&y!=n*n&&z!=n*n&&h!=n*n) cout<<5;
return 0;
}