• UVA 227 Puzzle(基础字符串处理)


    题目链接:

    https://cn.vjudge.net/problem/UVA-227

      1 /*
      2 问题 输入一个5*5的方格,其中有一些字母填充,还有一个空白位置,输入一连串
      3 的指令,如果指令合法,能够得到一个移动后的方格就输出方格,不能就输出
      4 “This puzzle has no final configuration.” 
      5 
      6 解题思路
      7 模拟,一个一个的读入字符,包括空格,再读入若干行指令,如果指令表面合法,进入模拟看内容是否合法,不合法直接输出提示。
      8  
      9 易错点
     10 读入和控制结束问题,注意读入指令后有一个换行需要处理
     11 输出格式,将换行放在谜题数前面 
     12 */
     13 #include<cstdio>
     14 #include<cstring>
     15 
     16 int check(char *s);
     17 int move(char e[][11],int x, int y,char *s);
     18 int main()
     19 {
     20     char e[11][11],s1[100],s[1100],ch;
     21     int i,j,flag,t=0,x,y,lens;
     22     while(1){    
     23         for(i=1;i<=5;i++){
     24             gets(e[i]+1);
     25             if(i == 1 && e[1][1] == 'Z'){
     26                 return 0;//控制结束 
     27             }
     28         }
     29         
     30         //整合指令 
     31         memset(s,0,sizeof(char)*1100);
     32         memset(s1,0,sizeof(char)*100);
     33         while(1){
     34             scanf("%s",s1);
     35             strcat(s,s1);
     36             lens=strlen(s);
     37             if(s[lens-1] == '0')
     38                 break;
     39         }
     40         getchar();//注意吃掉一个换行 
     41         
     42         //找到空白位置 
     43         for(i=1;i<=5;i++){
     44             for(j=1;j<=5;j++){
     45                 if(e[i][j] == ' '){
     46                     x=i;
     47                     y=j;
     48                 }
     49             }
     50         }
     51         
     52         if(t != 0)//注意格式 
     53             printf("
    ");
     54             
     55         printf("Puzzle #%d:
    ",++t);
     56         if(check(s)){
     57             if(move(e,x,y,s))
     58                 for(i=1;i<=5;i++){
     59                     for(j=1;j<=5;j++){
     60                         if(j == 1)
     61                             printf("%c",e[i][j]);
     62                         else
     63                             printf(" %c",e[i][j]);
     64                     }
     65                     printf("
    ");
     66                 }
     67             else
     68                 printf("This puzzle has no final configuration.
    ");
     69         }
     70         else
     71             printf("This puzzle has no final configuration.
    ");
     72     }
     73     return 0;
     74 } 
     75 
     76 int move(char e[][11],int x, int y,char *s){
     77     int len=strlen(s),i;
     78     for(i=0;i<len-1;i++){
     79         if(s[i] == 'A'){
     80             if(x-1 < 1) return 0;
     81             e[x][y]=e[x-1][y];
     82             e[x-1][y]=' ';
     83             x--;
     84         }
     85         else if(s[i] == 'B'){
     86             if(x+1 > 5) return 0;
     87             e[x][y]=e[x+1][y];
     88             e[x+1][y]=' ';
     89             x++;
     90         }
     91         else if(s[i] == 'R'){
     92             if(y+1 > 5) return 0;
     93             e[x][y]=e[x][y+1];
     94             e[x][y+1]=' ';
     95             y++;
     96         }
     97         else if(s[i] == 'L'){
     98             if(y-1 < 1) return 0;
     99             e[x][y]=e[x][y-1];
    100             e[x][y-1]=' ';
    101             y--;
    102         }
    103     }
    104     return 1;    
    105 }
    106 
    107 int check(char *s)
    108 {
    109     int len=strlen(s),i;
    110     for(i=0;i<len-1;i++){
    111         if(s[i] != 'A' && s[i] != 'B' && s[i] != 'R' && s[i] != 'L')
    112             return 0;
    113     }
    114     return 1;
    115 }
  • 相关阅读:
    Excelファイルを扱う方法
    BINARYSEARCH有り無しのパフォーマンスの違い
    権限チェック
    ラジオボタンで選択項目を動的に変更
    ALVのイベントを取得する方法
    LOOP AT SCREEN
    MOVE-PERCENTAGE(文字列の部分の代入)
    Java快捷键与搜狗输入法快键的冲突
    Android之RadioButton多行
    Android之socket服务端
  • 原文地址:https://www.cnblogs.com/wenzhixin/p/8854968.html
Copyright © 2020-2023  润新知