USACO transform
题意:将转换前字符串经过题目给出的7种方式转换成转换后的字符串。注意5是前三种跟第四种结合。
mark:模拟一下就ok了~
代码:
/* ID: andre_j2 LANG: C TASK: transform */ #include <stdio.h> #include <string.h> int i,j; int pp(char a[][15], char b[][15], int n) { int i; for(i = 0; i < n; i++) if(strcmp(a[i], b[i])) return 0; return 1; } void zh1(char a[][15], char c[][15], int n) { for(i = 0; i < n; i++) { for(j = 0; j < n; j++) c[j][n-1-i] = a[i][j]; c[i][n] = '\0'; } } void zh2(char a[][15], char c[][15], int n) { for(i = 0; i < n; i++) for(j = 0; j < n; j++) c[n-1-i][n-1-j] = a[i][j]; } void zh3(char a[][15], char c[][15], int n) { for(i = 0; i < n; i++) for(j = 0; j < n; j++) c[n-1-j][i] = a[i][j]; } void zh4(char a[][15], char c[][15], int n) { for(i = 0; i < n; i++) { for(j = 0; j < n/2; j++) c[i][n-1-j] = a[i][j]; for(; j < n; j++) c[i][n-1-j] = a[i][j]; c[i][n] = '\0'; } } main () { freopen("transform.in", "r", stdin); freopen("transform.out", "w", stdout); int k,n,flag; char a[15][15],b[15][15],c[15][15],d[15][15]; scanf("%d", &n); for(i = 0; i < n; i++) scanf("%s", a[i]); for(i = 0 ; i < n; i++) scanf("%s", b[i]); flag = 0; for(k = 1; k < 8; k++) { if(flag) break; switch(k) { case 1: zh1(a, c, n); if(pp(b, c, n)) {printf("1\n");flag = 1;} break; case 2: zh2(a, c, n); if(pp(b, c, n)) {printf("2\n");flag = 1;} break; case 3: zh3(a, c, n); if(pp(b, c, n)) {printf("3\n");flag = 1;} break; case 4: zh4(a, c, n); if(pp(b, c, n)) {printf("4\n");flag = 1;} break; case 5: zh1(a, c, n); zh4(c, d, n); if(pp(b, d, n)) {printf("5\n");flag = 1;break;} zh2(a, c, n); zh4(c, d, n); if(pp(b, d, n)) {printf("5\n");flag = 1;break;} zh3(a, c, n); zh4(c, d, n); if(pp(b, d, n)) {printf("5\n");flag = 1;break;} case 6: if(pp(a, b, n)) {printf("6\n");flag = 1;} break; case 7: printf("7\n"); } } exit (0); }