1596 - 旋转矩阵

通过次数

0

提交次数

0

时间限制 : 1 秒 内存限制 : 32 MB


任意输入两个9阶以下矩阵,要求判断第二个是否是第一个的旋转矩阵,如果是,输出旋转角度(0、90、180、270),如果不是,输出-1。<br />

要求先输入矩阵阶数,然后输入两个矩阵,每行两个数之间可以用任意个空格分隔。行之间用回车分隔,两个矩阵间用任意的回车分隔。

<br />

题目输入


输入有多组数据。<br />

每组数据第一行输入n(1<=n<=9),从第二行开始输入两个n阶矩阵。

<br />

题目输出


判断第二个是否是第一个的旋转矩阵,如果是,输出旋转角度(0、90、180、270),如果不是,输出-1。

如果旋转角度的结果有多个,则输出最小的那个。

<br />

输入/输出样例

输入格式

4
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
16 15 14 13
12 11 10 9
8 7 6 5
4 3 2 1
3
1 2 3
4 5 6
7 8 9
3 2 1
6 5 4 
9 8 7

输出格式

180
-1

C语言解答

#include <stdio.h>
#define MAXN 10
int a[MAXN][MAXN];
int b[MAXN][MAXN];

int main(){
        int n,i,j,mark=0;
        while(scanf("%d",&n)==1){
        
        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]);
             }
        }

          for(i=0;i<n;i++){
             for(j=0;j<n;j++){
             
               if(a[i][j]!=b[i][j])   {mark =1;i=n;  j=n;}
             }
        }
             if(mark==0) {printf("0\n");}




             else{    for(i=0;i<n;i++){
                       for(j=0;j<n;j++){
                     if(a[i][j]!=b[j][n-i-1])   {mark =0;i=n;  j=n;}
                     
                         
             }
        }
             if(mark==1) {printf("90\n");}
             
             else {
                       for(i=0;i<n;i++){
                       for(j=0;j<n;j++){
                     if(a[i][j]!=b[n-i-1][n-j-1])   {mark =1;i=n;  j=n;}
                         
             }
        }
             
             if(mark==0)  { printf("180\n");  }

            else {
            
                 for(i=0;i<n;i++){

                       for(j=0;j<n;j++){
                     if(a[i][j]!=b[n-j-1][i])   {mark =0;i=n;  j=n;}
                         
             }
        }
            
              if(mark==1)  { printf("270\n");  }

              if(mark==0)  printf("-1\n");
            
            }  }

             


             
             
        }
        }
       // printf("%d",a[0][0]);
        return 0;
}

C++解答

#include <stdio.h>
#define MAXN 10
int a[MAXN][MAXN];
int b[MAXN][MAXN];

int main(){
        int n,i,j,mark=0;
        while(scanf("%d",&n)==1){
        
        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]);
             }
        }

          for(i=0;i<n;i++){
             for(j=0;j<n;j++){
             
               if(a[i][j]!=b[i][j])   {mark =1;i=n;  j=n;}
             }
        }
             if(mark==0) {printf("0\n");}




             else{    for(i=0;i<n;i++){
                       for(j=0;j<n;j++){
                     if(a[i][j]!=b[j][n-i-1])   {mark =0;i=n;  j=n;}
                     
                         
             }
        }
             if(mark==1) {printf("90\n");}
             
             else {
                       for(i=0;i<n;i++){
                       for(j=0;j<n;j++){
                     if(a[i][j]!=b[n-i-1][n-j-1])   {mark =1;i=n;  j=n;}
                         
             }
        }
             
             if(mark==0)  { printf("180\n");  }

            else {
            
                 for(i=0;i<n;i++){

                       for(j=0;j<n;j++){
                     if(a[i][j]!=b[n-j-1][i])   {mark =0;i=n;  j=n;}
                         
             }
        }
            
              if(mark==1)  { printf("270\n");  }

              if(mark==0)  printf("-1\n");
            
            }  }

             


             
             
        }
        }
       // printf("%d",a[0][0]);
        return 0;
}