看了题解,但是一直困在43分,鄙人无才,找不出代码哪错了,求道友解惑
查看原帖
看了题解,但是一直困在43分,鄙人无才,找不出代码哪错了,求道友解惑
654733
liuqishijian楼主2022/1/29 18:40
/*
情况1(右转90度) 原图中(i,j)被旋转到了(j,n-i+1) 这里的+1很重要

情况2(右转180度) 原图中(i,j)被旋转到了(n-i+1,n-j+1)

情况3(右转270度) (i,j)-->(n-j+1,i)

情况4(对称) (i,j)-->(i,n-j+1)

情况5(组合) 将情况4做完后传给情况1,2,3即可

情况6(不动) ……

情况7(无解) 以上情况均不符合
*/
#include<stdio.h>
#include<string.h>
int main()
{
    int n,jieguo=0;
    char a[10][10],b[10],c[10][10];
	char d[10][10],e[10][10];
	//a数组输入开始的,b数组辅助输入的,c数组是目标图形,e数组用在第五种情况
	scanf("%d",&n);
    scanf("%s",b);
    int t=strlen(b);
    strcpy(&a[1][1],b);
    for(int i=2;i<=n;i++){
        scanf("%s",b);
        strcpy(&a[i][1],b);
    }
	scanf("%s",b);
    t=strlen(b);
    strcpy(&c[1][1],b);
    for(int i=2;i<=n;i++){
        scanf("%s",b);
		strcpy(&c[i][1],b);
	}
	while(1){
		//情况1(右转90度) 原图中(i,j)被旋转到了(j,n-i+1) 
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			d[j][n-i+1]=a[i][j];
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(d[i][j]==c[i][j])
				jieguo=1;
			else{
				jieguo=7;
				break;
			}
		}
	}
	if(jieguo==1)
		break;
	//情况2(右转180度) 原图中(i,j)被旋转到了(n-i+1,n-j+1)
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			d[n-i+1][n-j+1]=a[i][j];
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(d[i][j]==c[i][j])
				jieguo=2;
			else{
				jieguo=7;
				break;
			}
		}
	}
	if(jieguo==2)
		break;
	//情况3(右转270度) (i,j)-->(n-j+1,i)
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			d[n-j+1][i]=a[i][j];
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(d[i][j]==c[i][j])
				jieguo=3;
			else{
				jieguo=7;
				break;
			}
		}
	}
	if(jieguo==3)
		break;
	//情况4(对称) (i,j)-->(i,n-j+1)
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			d[i][n-j+1]=a[i][j];
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(d[i][j]==c[i][j])
				jieguo=4;
			else{
				jieguo=7;
				break;
			}
		}
	}
	if(jieguo==4)
		break;
	//情况5(组合) 将情况4做完后传给情况1,2,3即可
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			d[i][n-j+1]=a[i][j];
		}
	}
	while(1){
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			e[j][n-i+1]=d[i][j];
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(e[i][j]==c[i][j])
				jieguo=5;
			else{
				jieguo=7;
				break;
			}
		}
	}
	if(jieguo==5)
		break;
	//情况2
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			e[n-i+1][n-j+1]=d[i][j];
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(e[i][j]==c[i][j])
				jieguo=5;
			else{
				jieguo=7;
				break;
			}
		}
	}
	if(jieguo==5)
		break;
	//情况3
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			e[n-j+1][i]=d[i][j];
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(e[i][j]==c[i][j])
				jieguo=5;
			else{
				jieguo=7;
				break;
			}
		}
	}
	if(jieguo==5)
		break;
	break;
	}
	if(jieguo==5)
		break;
	//情况6不动
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(a[i][j]==c[i][j]){
				jieguo=6;
			}
			else{
				jieguo=7;
				break;
			}
		}
	}
	if(jieguo==6)
		break;
	break;
	}
	printf("%d",jieguo);
	return 0;
}
2022/1/29 18:40
加载中...