UVA227-Puzzle

2018-10-25-11:45:44

原題連接

  水題,卡輸入輸出,否則怎麼能說是ACM World Finals呢。ios

  本題大意

      大致意思就是給你一個5*5的棋盤,每次你須要先輸入棋盤,而後輸入一連串指令,指令以‘0’結尾,當棋盤第0行第0列爲'Z'時表示遊戲結束。spa

  本題思路

      拿到題的第一反應就是輸入棋盤,接着一 一讀入命令並執行便可。可是必定要注意輸入輸出問題。.net

    每一個樣例輸出之間有一個空行,但切記輸入之間無換行。code

    本題拿來練習輸入輸出是一道不錯的題。blog

 1 #include <cstdio>
 2 #include <iostream>
 3 using namespace std;
 4 void Swap(char &s1,char &s2);
 5 
 6 int main()
 7 {
 8     char ans,s[5][5];
 9     int dx,dy,Case=0;//用於儲存空格位置
10     while(true){
11       bool flag=true;
12       for(int i=0;i<5;i++){
13         for(int j=0;j<5;j++){
14           scanf("%c",&s[i][j]);
15           if(s[0][0]=='Z')  return 0;
16           if(s[i][j]==' '){
17             dx=i; dy=j;
18           }
19         }
20         getchar();
21       }
22       while((ans=getchar())!='0'){
23         if(ans=='A'&&dx-1>=0){
24             Swap(s[dx][dy],s[dx-1][dy]);
25             dx-=1;
26         }
27         else if(ans=='B'&&dx+1<=4){
28             Swap(s[dx][dy],s[dx+1][dy]);
29             dx+=1;
30         }
31         else if(ans=='L'&&dy-1>=0){
32             Swap(s[dx][dy],s[dx][dy-1]);
33             dy-=1;
34         }
35         else if(ans=='R'&&dy+1<=4){
36             Swap(s[dx][dy],s[dx][dy+1]);
37             dy+=1;
38         }
39         else if(ans!='\n') flag=false;
40       }
41       getchar();
42       if(Case)  printf("\n");
43       printf("Puzzle #%d:\n",++Case);
44       if(flag){
45         for(int i=0;i<5;i++){
46           for(int j=0;j<5;j++)
47             if(!j) printf("%c",s[i][j]);
48             else printf(" %c",s[i][j]);
49             printf("\n");
50         }
51       }
52       else
53         printf("This puzzle has no final configuration.\n");
54     }
55     return 0;
56 }
57 void Swap(char &s1,char &s2){
58     char c=s1;
59     s1=s2;
60     s2=c;
61 }
本站公眾號
   歡迎關注本站公眾號,獲取更多信息