这里的题目要求很简单,答案也只能是1-7,关键就是把各个转换前后的位置关系弄清楚,直接上代码。注释应该挺清楚的吧,这里就不详细说了。
```cpp
#include<iostream>
using namespace std;
int n; //正方形大小
char A[15][15]; //初始图形
char B[15][15]; //目标图形
bool isOne(char A[15][15], char B[15][15])
{
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
if (B[j][n + 1 - i] != A[i][j])return false;
}
}
return true;}
bool isTwo(char A[15][15], char B[15][15])
{
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
if (B[n + 1 - i][n + 1 - j] != A[i][j])return false;
}
}
return true;}
bool isThree(char A[15][15], char B[15][15])
{
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
if (A[i][j] != B[n + 1 - j][i])return false;
}
}
return true;}
bool isFour(char A[15][15], char B[15][15])
{
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
if (A[i][j] != B[i][n + 1 - j])return false;
}
}
return true;}
bool isFive(char A[15][15], char B[15][15])
{
char C[15][15]; //暂存图形
//先对折
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
C[i][n + 1 - j] = A[i][j];
}
}
//判断能否通过1-3的其中一个步骤得到目标图形
if (isOne(C, B) || isTwo(C, B) || isThree(C, B))return true;
return false;}
bool isSix(char A[15][15], char B[15][15])
{
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
if (A[i][j] != B[i][j])return false;
}
}
return true;}
int main()
{
cin >> n;
//输入初始图形
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
cin >> A[i][j];
}
}
//输入目标图形
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
cin >> B[i][j];
}
}
//逐个方法确认
int result = 0;
if (isOne(A, B))result = 1;
else if (isTwo(A, B))result = 2;
else if (isThree(A, B))result = 3;
else if (isFour(A, B))result = 4;
else if (isFive(A, B))result = 5;
else if (isSix(A, B))result = 6;
else result = 7;
cout << result; //输出答案
return 0;
}