蒟蒻求助
查看原帖
蒟蒻求助
365825
Orange_qwq楼主2021/6/30 11:34
#include<bits/stdc++.h>
using namespace std;
char a[12][12],b[12][12],c[12][12],d[12][12],n;
bool w1(){
	for(int i = 0;i < n;i++){
		for(int j = 0;j < n;j++){
			c[j][n - i + 1] = d[i][j];
		}
	}
	for(int i = 0;i < n;i++){
		for(int j = 0;j < n;j++){
			if(c[i][j] != b[i][j])return 0;
		}
	}
	return 1;
}
bool w2(){
	for(int i = 0;i < n;i++){
		for(int j = 0;j < n;j++){
			c[n - i + 1][n - j + 1] = d[i][j];
		}
	}
	for(int i = 0;i < n;i++){
		for(int j = 0;j < n;j++){
			if(c[i][j] != b[i][j])return 0;
		}
	}
	return 1; 
}
bool w3(){
	for(int i = 0;i < n;i++){
		for(int j = 0;j < n;j++){
			c[n - j + 1][i] = d[i][j];
		}
	}
	for(int i = 0;i < n;i++){
		for(int j = 0;j < n;j++){
			if(c[i][j] != b[i][j])return 0;
		}
	}
	return 1;
}
bool w4(){
	for(int i = 0;i < n;i++){
		for(int j = 0;j < n;j++){
			d[i][n - j + 1] = a[i][j]; 
		}
	}
	for(int i = 0;i < n;i++){
		for(int j = 0;j < n;j++){
			if(d[i][j] != b[i][j])return 0;
		}
	}
	return 1;
}
//这些是根据题解推出的规律,wtcl 
bool w5(){
	w4();
    if(w1() || w2() || w3())return 1;
    return 0;
}
//先翻转一遍,然后求返回值,是的话就返回1
//为了w5我还改了前面转换的变量,翻转之后就能直接用翻转之后的变量来进行各种操作 
bool w6(){
	for(int i = 0;i < n;i++){
		for(int j = 0;j < n;j++){
			if(a[i][j] != b[i][j])return 0;
		}
	}
	return 1;
}
//这里是直接比较 
void w(){
	if(w1())cout << 1;
	else if(w2())cout << 2;
	else if(w3())cout << 3;
	else if(w4())cout << 4;
	else if(w5())cout << 5;
	else if(w6())cout << 6;
	else cout << 7;
}
//懒得写在主程序了 
int main(){
	cin >> n;
	for(int i = 0;i < n;i++){
		for(int j = 0;j < n;j++){
			cin >> a[i][j];
			d[i][j] = a[i][j];
		}
	}
	for(int i = 0;i < n;i++){
		for(int j = 0;j < n;j++)cin >> b[i][j];
	}
	w();
	return 0;
}

只对了1个点,实在整不出来啊啊啊啊

2021/6/30 11:34
加载中...