您的位置:首页 > 其它

UVA 227 Puzzle

2016-12-26 22:43 381 查看
#include<cstdio>
#include<string.h>
char ch[6][6];
char common[1010];
char common1[1010];
int main(){
    int case1=0;
    while(gets(ch[0])){
        if(ch[0][0]=='Z')break;
        for(int i=1;i<5;i++){
            gets(ch[i]);
        }

        int x=0,y=0;
        int flag=1;//用于最终结果输出的判定 
        for(int i=0;i<5;i++)
          for(int j=0;j<5;j++)
               if(ch[i][j]==' '){
                   x=i;y=j;
                   break;
               }
//将不同行的命令连接起来 
    memset(common,0,sizeof(common));
    int ok=1;//用于退出下面一个while循环 
        while(true){
            gets(common1);
            for(int i=0;i<strlen(common1);i++){
                if(common1[i]=='0'){ok=0;break;}
            }
            strcat(common,common1);
            if(!ok)break;
        }

       if(case1)printf("\n");
        printf("Puzzle #%d:\n",++case1);
        int length=strlen(common);
        for(int i=0;i<length;i++){
        if(common[i]=='A'){
            if(x==0){
            printf("This puzzle has no final configuration.\n");
            flag=0;
            break;}

            ch[x][y]=ch[x-1][y];
            ch[x-1][y]=' ';
            x=x-1;
        }
        else if(common[i]=='B'){
            if(x==4){
              printf("This puzzle has no final configuration.\n");
              flag=0;
            break;
            }

            ch[x][y]=ch[x+1][y];
            ch[x+1][y]=' ';
            x=x+1;
        }
        else if(common[i]=='L'){
            if(y==0){
            printf("This puzzle has no final configuration.\n");
            flag=0;
            break;
            }

            ch[x][y]=ch[x][y-1];
            ch[x][y-1]=' ';
            y=y-1;    
        }
        else if(common[i]=='R'){
            if(y==4){
            printf("This puzzle has no final configuration.\n");
            flag=0;
            break;
            }

            ch[x][y]=ch[x][y+1];
            ch[x][y+1]=' ';
            y=y+1;
        }    
        else if (common[i]=='0')break;//此处不能用换成else break; 
        }

        if(flag)
        for(int i=0;i<5;i++){
            printf("%c",ch[i][0]);
            for(int j=1;j<5;j++)
                printf(" %c",ch[i][j]);
            printf("\n");
        }
    }
    return 0;
}

本题最主要的是数据的输入

1、用scanf和%c输入时,需要用一个getchar吃掉末尾的换行。

2、用scanf和%s输入时,遇到空格就会结束一个字符串。

3、最终选用gets输入数据(虽然不赞成,因为很有可能数据溢出)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: