我记得scanf不存在\r\n这种问题的
#include<iostream>
using namespace std;
//使用一个二维数组表示方格纸可见部分和遮挡部分
bool vision[1010][1010] = { 0 };
//顺时针转动90°, 180°或270°
bool v90[1010][1010] = { 0 }, v180[1010][1010] = { 0 }, v270[1010][1010] = { 0 };
char content[1010][1010];
int n;
//输入内容
void input(void)
{
cin >> n;
//输入原始的格子纸和内容矩阵
for (int i = 0; i <= n - 1; i += 1) scanf("%s", vision[i]);
for (int i = 0; i <= n - 1; i += 1) scanf("%s", content[i]);
return;
}
//计算格子纸转动90°的结果
void rt90(void)
{
//将原始矩阵顺时针旋转90°
for (int i = 0; i <= n - 1; i += 1) for (int j = 0; j <= n - 1; j += 1) v90[i][j] = vision[j][n - 1 - i];
return;
}
//将旋转90°的结果再旋转90°就是转动180°的结果
void rt180(void)
{
for (int i = 0; i <= n - 1; i += 1) for (int j = 0; j <= n - 1; j += 1) v180[i][j] = v90[j][n - 1 - i];
return;
}
//再旋转90°得到转动270°的结果
void rt270(void)
{
for (int i = 0; i <= n - 1; i += 1) for (int j = 0; j <= n - 1; j += 1) v270[i][j] = v180[j][n - 1 - i];
return;
}
int main()
{
input();
rt90();
rt180();
rt270();
for (int i = 0; i <= n - 1; i += 1) for (int j = 0; j <= n - 1; j += 1) if (vision[i][j] == 79) putchar(content[i][j]);
for (int i = 0; i <= n - 1; i += 1) for (int j = 0; j <= n - 1; j += 1) if (v270[i][j] == 79) putchar(content[i][j]);
for (int i = 0; i <= n - 1; i += 1) for (int j = 0; j <= n - 1; j += 1) if (v180[i][j] == 79) putchar(content[i][j]);
for (int i = 0; i <= n - 1; i += 1) for (int j = 0; j <= n - 1; j += 1) if (v90[i][j] == 79) putchar(content[i][j]);
return 0;
}