Uva 227 - Puzzle (数组和字符串)
题不难,就是小坑涉及到基础需注意。。。
比如:
字符串后面的'\0'和'0'不同。
getchar函数读数据直到用户按回车为止(回车字符也放在缓冲区中)。
还有题目pdf中样例二 不能直接复制到控制台调试,因为没空格,要手动测试这组。
1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 #include<algorithm> 5 #include<cstdlib> 6 #include<cmath> 7 #include<cctype> 8 #include<vector> 9 #include<queue> 10 #include<map> 11 #include<set> 12 #define eps 10e-6 13 14 using namespace std; 15 16 typedef long long ll; 17 char mp[8][8]; 18 char op[205],op1[105]; 19 20 int main() 21 { 22 int ex,ey; 23 int cas = 1; 24 while(gets(mp[0])!=NULL) 25 { 26 if(mp[0][0]=='Z') 27 break; 28 if(cas!=1) printf("\n"); 29 for(int i=1;i<5;i++) 30 gets(mp[i]); 31 for(int i=0;i<5;i++) 32 { 33 // printf("ok: %s\n",mp[i]); 34 for(int j=0;j<5;j++) 35 { 36 if(mp[i][j]==' ') 37 { 38 ex = i; 39 ey = j; 40 } 41 } 42 } 43 printf("Puzzle #%d:\n",cas++); 44 45 memset(op,0,sizeof(op)); 46 memset(op1,0,sizeof(op1)); 47 int flag = 0; 48 char c; 49 gets(op); 50 int l = strlen(op); 51 while(op[l-1]!='0') 52 { 53 gets(op1); 54 strcat(op,op1); 55 l = strlen(op); 56 } 57 for(int i=0;i<l-1;i++) 58 { 59 // printf("c=%c ex=%d ey=%d\n",c,ex,ey); 60 c = op[i]; 61 if(c=='A') 62 { 63 if(ex == 0) 64 { 65 flag = 1; 66 break; 67 } 68 mp[ex][ey] = mp[ex-1][ey]; 69 mp[ex-1][ey] = ' '; 70 ex--; 71 } 72 else if(c=='B') 73 { 74 if(ex == 4) 75 { 76 flag = 1; 77 break; 78 } 79 mp[ex][ey] = mp[ex+1][ey]; 80 mp[ex+1][ey] = ' '; 81 ex++; 82 } 83 else if(c=='L') 84 { 85 if(ey == 0) 86 { 87 flag = 1; 88 break; 89 } 90 mp[ex][ey] = mp[ex][ey-1]; 91 mp[ex][ey-1] = ' '; 92 ey--; 93 } 94 else 95 { 96 if(ey == 4) 97 { 98 flag = 1; 99 break; 100 } 101 mp[ex][ey] = mp[ex][ey+1]; 102 mp[ex][ey+1] = ' '; 103 ey++; 104 } 105 } 106 if(flag){ 107 printf("This puzzle has no final configuration.\n"); 108 } 109 else 110 { 111 for(int i=0;i<5;i++) 112 { 113 for(int j=0;j<4;j++) 114 { 115 printf("%c ",mp[i][j]); 116 } 117 printf("%c\n",mp[i][4]); 118 } 119 //printf("\n"); 120 } 121 // getchar(); 122 } 123 return 0; 124 }