/*
ID: fykalv3
LANG: C
TASK: transform
*/
#include <stdio.h>
#include <string.h>
typedef char SQ[15][15];
int equal(SQ s1, SQ s2, int n);
int rotate(SQ square, SQ resault, int n);
int reflect(SQ square, SQ resault, int n);
int transform(SQ s1, SQ s2, int n);
int main()
{
FILE *fin = fopen("transform.in", "r");
FILE *fout = fopen("transform.out", "w");
int n, i, j;
SQ s1, s2;
fscanf(fin, "%d", &n);
for (i = 0; i < n; i++)
fscanf(fin, "%s", s1[i]);
for (i = 0; i < n; i++)
fscanf(fin, "%s", s2[i]);
fprintf(fout, "%d\n", transform(s1, s2, n));
fclose(fin);
fclose(fout);
return 0;
}
int equal(SQ s1, SQ s2, int n)
{
int i, j;
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
if (s1[i][j] != s2[i][j])
return 0;
}
}
return 1;
}
int transform(SQ s1, SQ s2, int n)
{
SQ s = {0}, sq = {0}, squ = {0}, squa = {0};
rotate(s1, s, n);
if (equal(s, s2, n))
return 1;
rotate(s, sq, n);
if (equal(sq, s2, n))
return 2;
rotate(sq, squ, n);
if (equal(squ, s2, n))
return 3;
reflect(s1, squa, n);
if (equal(squa, s2, n))
return 4;
rotate(squa, s, n);
if (equal(s, s2, n))
return 5;
rotate(s, sq, n);
if (equal(sq, s2, n))
return 5;
rotate(sq, squ, n);
if (equal(squ, s2, n))
return 5;
if (equal(s1, s2, n))
return 6;
return 7;
}
int reflect(SQ square, SQ resault, int n)
{
int i, j, k = n / 2;
for (i = 0; i < n; i++) {
for (j = 0; j < k; j++) {
resault[i][j] = square[i][n-j-1];
resault[i][n-j-1] = square[i][j];
}
}
k = (n - 1) / 2;
if (n % 2) {
for (i = 0; i < n; i++)
resault[i][k] = square[i][k];
}
return 0;
}
int rotate(SQ square, SQ resault, int n)
{
int i, j;
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
resault[i][j] = square[n-j-1][i];
}
}
return 0;
}
好麻烦,重写一遍过了,之前的代码出了问题,就是旋转和对称的地方注意下公式就行了