<pre name="code" class="cpp">#include <stdio.h>
#define DEBUG 0
#define TESTCASES 8
#define MAX 10
//结构体可当形参,跟数组一样退化为指针,还可以直接赋值
typedef struct Square{
int size;
char arrayOfChars[MAX + 1][MAX + 1];
}Square;
Square initialSquare;
Square finalSquare;
Square rotateClockwise90(Square square){
Square squareTransformed;
squareTransformed.size = square.size;
int row, column;
for (row = 0; row < square.size; row++)
for (column = 0; column < square.size; column++)
squareTransformed.arrayOfChars[column][square.size - 1 - row] = square.arrayOfChars[row][column];
//可返回结构体当其他函数的形参
return squareTransformed;
}
Square reflect(Square square){
Square squareTransformed;
squareTransformed.size = square.size;
int row, column;
for (row = 0; row < square.size; row++)
for (column = 0; column < square.size; column++)
squareTransformed.arrayOfChars[row][square.size - 1 - column] =
square.arrayOfChars[row][column];
return squareTransformed;
}
int compare(Square squareTransformed){
if (squareTransformed.size != finalSquare.size)
return 0;
int row, column;
for (row = 0; row <squareTransformed.size; row++)
for (column = 0; column < squareTransformed.size; column++)
if (squareTransformed.arrayOfChars[row][column] != finalSquare.arrayOfChars[row][column])
return 0;
return 1;
}
int main(){
#if DEBUG
int testCase;
for (testCase = 1; testCase <= TESTCASES; testCase++){
char inputFileName[20] = "inputX.txt";
inputFileName[5] = '1' + (testCase - 1);
freopen(inputFileName, "r", stdin);
printf("\n#%d\n", testCase);
#endif
int size;
scanf("%d", &size);
initialSquare.size = size;
finalSquare.size = size;
int row;
for (row = 0; row < size; row++)
//注意输入字符串一定是从arrayOfChars[row][0],不是arrayOfChars[row][1]开始存储
//为了对称,row也要从0开始输入
scanf("%s", initialSquare.arrayOfChars[row]);
for (row = 0; row < size; row++)
scanf("%s", finalSquare.arrayOfChars[row]);
//用来缓存变换过程中的图形,避免重复计算
Square bufferSquare;
int transformation;
if ( compare( bufferSquare = rotateClockwise90(initialSquare) ) == 1 )
transformation = 1;
else if ( compare( bufferSquare = rotateClockwise90(bufferSquare) ) == 1 )
transformation = 2;
else if ( compare( bufferSquare = rotateClockwise90(bufferSquare) ) == 1 )
transformation = 3;
else if ( compare( bufferSquare = reflect(initialSquare) ) == 1)
transformation = 4;
else if ( (compare( bufferSquare = rotateClockwise90(bufferSquare) ) == 1) ||
(compare( bufferSquare = rotateClockwise90(bufferSquare) ) == 1) ||
(compare( bufferSquare = rotateClockwise90(bufferSquare) ) == 1) )
transformation = 5;
else if (compare(initialSquare) == 1)
transformation = 6;
else
transformation = 7;
printf("%d\n", transformation);
#if DEBUG
}
#endif
return 0;
}
USACO 1.2 Transformations (用结构体来模拟)
最新推荐文章于 2022-07-09 22:59:01 发布