这道题做着还比较顺利,只要找到规律就可以了!开始判断旋转270时判断错了,导致WA,后来查出来就AC了。
另外感觉C的输入输出流细节好多,所以以后就用一种方法,比如这次就只用fgets()了,没用scanf()
代码:
/*
by qr 2014-9-11 旋转矩阵
*/
#include <stdio.h> //scanf
int main(){
int arr1[9][9];
int arr2[9][9];
int n;
char temp[100];
while((fgets(temp,100,stdin))!=NULL){
int i,j;
n=temp[0]-'0';
for(i=0;i<n;i++){
fgets(temp,100,stdin);
int k=0;
for(j=0;j<n;j++){
arr1[i][j]=0;
while(temp[k]==' '){
k++;
}
while(temp[k]!=' ' && temp[k]!='\0' && temp[k]!='\n'){
arr1[i][j]=arr1[i][j]*10+(temp[k]-'0');
k++;
}
}
}
fgets(temp,100,stdin);
while(temp[0]=='\n'){
fgets(temp,100,stdin);
} //跳出循环时temp中是第二个矩阵的第一行
for(i=0;i<n;i++){
int k=0;
for(j=0;j<n;j++){
arr2[i][j]=0;
while(temp[k]==' '){
k++;
}
while(temp[k]!=' ' && temp[k]!='\0' && temp[k]!='\n'){
arr2[i][j]=arr2[i][j]*10+(temp[k]-'0');
k++;
}
}
if(i!=(n-1))
fgets(temp,100,stdin);
}
//判断是否为旋转矩阵
//0度
int flag=1;
for(i=0;i<n;i++){
for(j=0;j<n;j++){
if(arr1[i][j]!=arr2[i][j]){
flag=0;
break;
}
}
}
if(flag){
printf("0\n");
continue;
}
//90度
flag=1;
for(i=0;i<n;i++){
for(j=0;j<n;j++){
if(arr1[i][j]!=arr2[j][n-i-1]){
flag=0;
break;
}
}
}
if(flag){
printf("90\n");
continue;
}
//180度
flag=1;
for(i=0;i<n;i++){
for(j=0;j<n;j++){
if(arr1[i][j]!=arr2[n-i-1][n-j-1]){
flag=0;
break;
}
}
}
if(flag){
printf("180\n");
continue;
}
//270度
flag=1;
for(i=0;i<n;i++){
for(j=0;j<n;j++){
if(arr1[i][j]!=arr2[n-j-1][i]){
flag=0;
break;
}
}
}
if(flag){
printf("270\n");
continue;
}
//不是旋转矩阵
printf("-1\n");
}
return 0;
}