思路清晰的代码
查看原帖
思路清晰的代码
279489
小熊1122楼主2021/8/19 14:03

这里的题目要求很简单,答案也只能是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;

}

2021/8/19 14:03
加载中...