只通过了第一个测试点,其他的点都有表示读到的输出是7,是我的输出格式有问题吗,还是其他地方的问题,我在自己的电脑上测试了几组数据,都得到正确输出了。
#include <stdio.h>
int rotate_90 (char g[][10],char A[][10],int N,int cot);
//旋转函数,执行一次,方块顺时针旋转90°
int reflect_y (char a[][10],int N,char A[][10]);
//用来做反射的函数
int test (char B[][10],char A[][10],int N);
//检验变化后的方块和输入是否一致
char e[10][10]={0};
char b[10][10]={0};
int main()
{
char a[10][10]={0};
char A[10][10]={0};
int N;
int c=0;
int r=0;
int m=0;
scanf("%d",&N);
getchar();
while(r<N){
a[r][c]=getchar();
c++;
if(c==N){
r++;
c=0;
getchar();
}
}
r=0;
c=0;
while(r<N){
A[r][c]=getchar();
c++;
if(c==N){
r++;
c=0;
getchar();
}
}
m=test(a,A,N);
if(m==1){
printf("6");
//如果输入的两个方块相同,直接输出6
}else{
m=rotate_90(a,A,N,0);
//不相同,就先从旋转开始做转换
if(m!=0){
printf("%d",m);
}else{
//经过旋转未能得到目标,反射
if(reflect_y(a,N,A)==1){
//反射后得到目标,输出4
printf("4");
}else{
reflect_y(a,N,A);
//先做反射,在做旋转
m=rotate_90(e,A,N,0);
//经过1-3次旋转得到目标,输出5
if(m!=0){
printf("5");
}else{
//否则输出7,无法得到
printf("7");
}
}
}
}
return 0;
}
int rotate_90 (char g[][10],char A[][10],int N,int cot)
{
int C=N-1;
int R=0;
int c=0;
int r=0;
while(r<N){
if(c<N){
b[R][C]=g[r][c];
R++;
c++;
}else if(c==N){
c=0;
R=0;
C--;
r++;
}
}
//旋转方块
r=0;
c=0;
while(r<N){
g[r][c]=b[r][c];
c++;
if(c==N){
c=0;
r++;
}
}
if(cot==3){
return 0;
}
//经过三次旋转还未得到目标方块,终止递归
if(test(b,A,N)==1){
cot++;
return cot;
//旋转得到目标方块,就返回,旋转次数,对应方法一、二、三
}else{
cot++;
return rotate_90(g,A,N,cot);
//旋转一次,未得到目标方块,递归,再做一次旋转
}
}
int reflect_y (char a[][10],int N,char A[][10])
{
int c=0;
int r=0;
while(c<N){
e[r][c]=a[r][N-c-1];
r++;
if(r==N){
c++;
r=0;
}
}
//反射函数
return test(e,A,N);
}
int test (char B[][10],char A[][10],int N)
{
int r=0;
int c=0;
int i;
while(r<N){
if(A[r][c]==B[r][c]){
i=1;
}else{
i=0;
break;
}
c++;
if(c==N){
r++;
c=0;
}
}
return i;
}
我自己猜测问题应该不在对方块的旋转和反射上,应该是在我的那一连串判断语句里,但我自己找不到具体问题出在哪里,求大佬帮忙orz