求大佬orz
查看原帖
求大佬orz
1576696
KatsuraJiu楼主2024/12/4 01:45

只通过了第一个测试点,其他的点都有表示读到的输出是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

2024/12/4 01:45
加载中...