USACO 1.2 Transformations (用结构体来模拟)
2015-09-11 21:44
429 查看
<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; }
相关文章推荐
- Transformation 能将 Windows XP/Server 2003 操作系统,完美地模拟成 Windows Vista 的软件
- C#中结构体和字节数组转换实现
- 用javascript和css模拟select的脚本
- 解析结构体的定义及使用详解
- PHP模拟asp.net的StringBuilder类实现方法
- c#入门之枚举和结构体使用详解(控制台接收字符串以相反的方向输出)
- javascript用层模拟可移动的小窗口
- 自编jQuery插件实现模拟alert和confirm
- PHP模拟asp中response类实现方法
- javascript 模拟点击广告
- JQuery中模拟image的ajaxPrefilter与ajaxTransport处理
- C++基础入门教程(三):数组、字符串、结构体、共用体
- php实现模拟post请求用法实例
- JavaScript实现MIPS乘法模拟的方法
- 模拟xcopy的函数
- php模拟服务器实现autoindex效果的方法
- C# SendInput 模拟鼠标操作的实现方法
- C/C++语言中结构体的内存分配小例子
- C#中使用反射获取结构体实例及思路
- PHP模拟登陆163邮箱发邮件及获取通讯录列表的方法