此题意思是让一个矩阵旋转0度,90度,180度,或270度后求相同的元素的最多数目是多少。
最难的是矩阵的旋转,我的想法就是先将矩阵转置,然后让每一行的元素倒置(逆时针旋转90度),或者让每一列的元素倒置(顺时针旋转90度),至于为什么你可以随便拿一个矩阵试试,我也是这么干的,当然还有其他方法,可以多想想。
#include
#include
int a[35][35];
int b[35][35];
int c[35][35];
int n;
int main()
{
while(scanf("%d",&n)!=EOF)
{
if(n == 0)
break;
int i,j;
memset(c,0,sizeof(c));
int cnt = 0,maxt = 0;
for(i = 0; i < n; i++)
for(j = 0; j < n; j++){
scanf("%d",&a[i][j]);
}
for(i = 0; i < n; i++)
for(j = 0; j < n; j++){
scanf("%d",&b[i][j]);
if(b[i][j] == a[i][j])
cnt++;
}
if(cnt > maxt)
maxt = cnt;
for(int k = 0; k < 3; k++){
cnt = 0;
for(i = 0; i < n; i++)
for(j = 0; j < n; j++){
if(j > i){
int t = a[i][j];
a[i][j] = a[j][i];
a[j][i] = t;
}
}
for(i = 0; i < n; i++){
for(j = 0; j < n; j++){
c[i][j] = a[n-i-1][j];
//printf("%d ",c[i][j]);
}
//puts("");
}
memcpy(a,c,sizeof(c));
for(i = 0; i < n; i++)
for(j = 0; j < n; j++)
if(a[i][j] == b[i][j])
cnt++;
if(cnt > maxt)
maxt = cnt;
}
printf("%d\n",maxt);
}
}