uva227

#include <iostream>
#include<stdio.h>
#include<cstring>
using namespace std;
char puzzle[5][5];
char buf[10];
char order[1001];
int cnt=0;
int main()
{
    while(1)
    {
    	memset(puzzle,' ',sizeof(puzzle));
    	int blankx,blanky;//记录空格所在的位置
        cnt+=1;//记录轮次
        bool flag=true;
        fgets(buf,10,stdin);//该问题输入的要求是读取前5个字符,包括空格
        //所以scanf不可用,getchar可以用但是要需要正确处理回车
        //fgets用来读取完整的一行,一旦读取到回车符即停止而且能够利用maxn
        if(buf[0]=='Z')//当读入的第一行的第一个字符是'Z'时跳出循环
            break;
        for(int i=0;i<5;i++)
            puzzle[0][i]=buf[i];
        if(cnt!=1)
            printf("\n");
//为上一轮操作补上一个回车,读到字符'Z'时该句不输出达到题目的输出格式的要求
        for(int i=1;i<5;i++)
        {
            fgets(puzzle[i],10,stdin);
        }
        for(int i=0;i<5;i++){
            for(int j=0;j<5;j++)
                if(puzzle[i][j]==' ')
                {
                    blankx=i;
                    blanky=j;
                }
        }
        char c;
        //利用getchar一直读,直到读到'0'为止
        
        while((c=getchar())!='0')
        {
            if(c=='A'&&blankx-1>=0)
            {
                swap(puzzle[blankx][blanky],puzzle[blankx-1][blanky]);
                blankx-=1;
            }else if(c=='B'&&blankx+1<=4)
            {
                swap(puzzle[blankx][blanky],puzzle[blankx+1][blanky]);
                blankx+=1;
            }else if(c=='L'&&blanky-1>=0)
            {
                swap(puzzle[blankx][blanky],puzzle[blankx][blanky-1]);
                blanky-=1;
            }else if(c=='R'&&blanky+1<=4)
            {
                swap(puzzle[blankx][blanky],puzzle[blankx][blanky+1]);
                blanky+=1;
            }else if(c!='\n'){flag=false;}
        }
        getchar();//处理'0'字符后面的回车
        printf("Puzzle #%d:\n",cnt);
        if(flag)
        {
            for(int i=0;i<5;i++){
                for(int j=0;j<5;j++)
                {
                printf("%c",puzzle[i][j]);
                if(j!=4)
                    printf(" ");
                }
                if(i!=4)
                    printf("\n");
            }
        }
        else{printf("This puzzle has no final configuration.");}

    }
    return 0;
}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值