地址:http://acm.hdu.edu.cn/showproblem.php?pid=1986
题意:按要求把字母或空格字符串扩展成5个01字符表示的字符串以后,缠绕放置在一个r*c的矩阵里。最后一排一排输出。
mark:各种wa。后来才发现是输入的问题。当字符串长度为0的时候,我本来用的是scanf的正则输入,结果事实证明不行。。。
另外用来放置扩展以后的字符串的字符数组ss一开始忘记清0也wa了一次。
代码:
1 # include <stdio.h> 2 # include <string.h> 3 4 5 char str[100] ; // less than 80 6 char ss[450] ; //less than 400 7 char out[25][25] ; 8 int vis[25][25] ; 9 int r, c ; 10 11 12 void load(char *s, char ch) 13 { 14 int i, val ; 15 if (ch == ' ') val = 0 ; 16 else val = ch-'A'+1 ; 17 18 for (i = 0 ; i < 5 ; i++) 19 { 20 if (val & (1<<i)) s[4-i] = '1' ; 21 else s[4-i] = '0' ; 22 } 23 s[5] = '\0' ; 24 } 25 26 27 void gao() 28 { 29 int x, y, d, i ; 30 int xx, yy ; 31 int tab[4][2] = {0,1,1,0,0,-1,-1,0} ; 32 memset(out, '0', sizeof(out)) ; 33 memset (vis, 0, sizeof(vis)) ; 34 x = y = d = 0 ; 35 for (i = 0 ; ss[i] ; i++) 36 { 37 out[x][y] = ss[i] ; 38 vis[x][y] = 1 ; 39 xx = x+tab[d][0], yy = y + tab[d][1] ; 40 if (vis[xx][yy] == 0 && xx >= 0 41 && xx < r && yy >= 0 && yy < c) //不需要改变方向 42 { 43 x = xx, y = yy ; 44 } 45 else 46 { 47 d = (d+1)%4 ;; 48 x += tab[d][0], y += tab[d][1] ; 49 } 50 } 51 } 52 53 54 int main () 55 { 56 int T, i, j, nCase = 1 ; 57 58 scanf ("%d%*c", &T) ; 59 while (T--) 60 { 61 scanf ("%d%*c%d%*c", &r, &c) ; 62 gets (str) ; 63 ss[0] = '\0' ; 64 for (i = 0 ; str[i] ; i++) 65 load(ss+i*5, str[i]) ; 66 gao() ; 67 printf ("%d ", nCase++) ; 68 for (i = 0 ; i < r ; i++) 69 for (j = 0 ; j < c ; j++) 70 putchar (out[i][j]) ; 71 puts ("") ; 72 } 73 return 0 ; 74 }