UVA-227

洛谷ide的神奇:
1、getline()会读取换行符占一个字节
2、cin不读换行符
PE!=AC

#include <bits/stdc++.h>
using namespace std;
int main(){
    //freopen("in.txt","r",stdin);
    //freopen("out.txt","w",stdout);
    int num=0;
    while(1){
        num++;
        string str[5];
        int k=0;
        while(getline(cin,str[k])&&str[0][0]!='Z'){
            k++;
        if(k==5)break;
        }
        if(str[0][0]=='Z')break;
        //网上参考坑爹的空行是这个
        if(num!=1)
            cout<<endl;
        //用双参数表示方便,找到空格位置,此处题目输入有问题S后要打空格
        int x=-1,y=-1;
        for(int i=0;i<5;i++){
            for(int j=0;j<5;j++){
                if(str[i][j]==' '){
                    x=i,y=j;
                    break;
                }
            }
            if(x!=-1)break;
        }
        string str1,str2;
        while(cin>>str2){
            str1=str1+str2;
            if(str2[str2.length()-1]=='0'){
                getchar();
                break;
            }
        }
        char c;
        int flag=0;
        for(int i=0;i<str1.length();i++){
            if(str1[i]=='A'){
                if(x-1<0){flag=1;break;}
                c=str[x][y];
                str[x][y]=str[x-1][y];
                str[x-1][y]=c;
                //记得要更新
                x=x-1;
            }
            else if(str1[i]=='B'){
                if(x+1>4){flag=1;break;}
                c=str[x][y];
                str[x][y]=str[x+1][y];
                str[x+1][y]=c;
                x=x+1;
            }
            else if(str1[i]=='L'){
                if(y-1<0){flag=1;break;}
                c=str[x][y];
                str[x][y]=str[x][y-1];
                str[x][y-1]=c;
                y=y-1;
            }
            else if(str1[i]=='R'){
                if(y+1>4){flag=1;break;}
                c=str[x][y];
                str[x][y]=str[x][y+1];
                str[x][y+1]=c;
                y=y+1;
            }
            else if(str1[i]=='0')
                break;
            else{
            //可能有违法输入
                flag=1;
                break;
            }
        }
        cout<<"Puzzle #"<<num<<":"<<endl;
        if(flag==1)
            cout<<"This puzzle has no final configuration."<<endl;//这个空行别漏了
        else
        for(int i=0;i<5;i++){
            for(int j=0;j<5;j++){
                if(j!=0)
                    cout<<' ';
                cout<<str[i][j];
            }
            //if(i!=4)//每行后空行是要的
            cout<<endl;
        }
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值