Puzzle——模拟

原题链接: https://vjudge.net/problem/UVA-227

题目描述:

1 > 有一个5*5的网格,只有一个格子是空格,其余的都是字母。
2 > 4个指令 A,B,L,R,分别代表向上向下向左向右。
3 > 输出执行完后的网格内的情况。
4 > 若有越界则单独输出

思路:使用scanf输入,用getchar()吸收换行符,题目要求跟华容道游戏类似,先记录空白的位置,然后按照步骤移动即可。另外这里用isspace()函数判断输入的字符是否为换行符

#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;
int main()
{
    char a[5][5];
    char c;
    int b=0;
    while(1){
        for(int i=0;i<5;i++){
            for(int j=0;j<5;j++){
                scanf("%c",&c);
                a[i][j]=c;
                if(a[0][0]=='Z')return 0;
            }
            getchar();   //吸收换行符
        }
        int i,j,flag1=0,flag2=0;
        for(i=0;i<5;i++){
            for(j=0;j<5;j++){
                if(a[i][j]==' '){   //记录空白的位置
                    flag1=1;
                    break;
                }
            }
            if(flag1)break;
        }
        while((c=getchar())!='0'){     //做出操作
            if(c == 'A' && i-1 >= 0){
                a[i][j] = a[i-1][j];
                a[i-1][j] = ' ';
                i -= 1;             //更改空格的位置 下同
            }
            else if(c == 'B' && i+1 < 5){
                a[i][j] = a[i+1][j];
                a[i+1][j] = ' ';
                i += 1;
            }
            else if(c == 'L' && j-1 >= 0){
                a[i][j] = a[i][j-1];
                a[i][j-1] = ' ';
                j -= 1;
            }
            else if(c == 'R' && j+1 < 5){
                a[i][j] = a[i][j+1];
                a[i][j+1] = ' ';
                j += 1;
            }
            else if(isspace(c))continue;  //判断c是否为换行符等
            else flag2=1;          //非法指令
        }
        getchar();
        if(!b)printf("Puzzle #%d:\n", ++b);  //按照格式输出
        else printf("\nPuzzle #%d:\n", ++b);
        if(flag2){                     //如果有非法指令
            printf("This puzzle has no final configuration.\n");
            continue;
        }
        for(int i=0;i<5;i++){        //输出操作后的结果
            for(int j=0;j<5;j++){
                if(!j)printf("%c",a[i][j]);
                else printf(" %c",a[i][j]);
            }
            printf("\n");
        }
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_43328040/article/details/87970653