UVa 227 Puzzle

这个题让我和题目一样--好迷惑,以为是一道水题,寻思做完了就睡觉
然后做到现在,前后做了两个小时,由于UVa编译器只能用c++11导致gets()废掉

网上的代码都是gets,用getline写遇到了很多困难,于是尝试用getchar写
排除了很多可能出现的问题,终于敲过了样例,此时过去了一个小时。。。

第二个小时在找PE的错误,这个错误真不想说啥了,恶心,空白行出现的位置其实差不多啊。。。

感觉不是我的错,因为之前所有类似格式都是这么写的,这道题居然,,,卡我数据???吐了
字符串处理本来就不是强项,应该多加练习!!!

唉唉睡觉去了(继续练练字符串!
来之不易的AC代码:
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<vector>
#include<set>
#include<map>
#include<queue>
#include<cmath>
#include<time.h>
using namespace std;

int main()
{
    char a[7][7];
    int cas = 1;
    while(1)
    {

        int p, q;
        char c;
        if(cas != 1)
            getchar();
        for(int i = 0; i < 5; i ++)
            for(int j = 0; j <= 5; j ++)
        {
            c = getchar();
            if(j == 5) continue;
            if(c == ' ')
            {
                p = i;
                q = j;
            }
            a[i][j] = c;
        }
       // getchar();

        if(a[0][0] == 'Z') break;
//        for(int i = 0; i < 5; i ++)
//        {
//            for(int j = 0; j < 5; j ++)
//            {
//                cout<<a[i][j];
//                if(j != 4)
//                    cout<<' ';
//            }
//            cout<<endl;
//        }
        char ss[1005];
        int cnt = 0;
        while(1)
        {
            c = getchar();
            if(c == '0') break;
            if(c == '\n')continue;
            if(c == ' ')continue;
            else ss[cnt ++] = c;
        }
        ss[cnt] = '\0';
//        for(int i = 0; i < strlen(ss); i ++)
//            cout<<ss[i];
//            cout<<endl;
//        cout<<p<<' '<<q<<endl;
        bool flag = 1;
        for(int i = 0; i < strlen(ss); i ++)
        {
            if(ss[i] == 'A')
            {
                if(p - 1 < 0) {
                    flag = 0;
                    break;
                }
                swap(a[p][q], a[p-1][q]);
//                a[p][q] = a[p-1][q];
//                a[p-1][q] = ' ';
                p--;
            }
            if(ss[i] == 'B')
            {
                if(p + 1 >= 5) {
                    flag = 0;
                    break;
                }
                swap(a[p][q], a[p+1][q]);
//                a[p][q] = a[p+1][q];
//                a[p+1][q] = ' ';
                p++;
            }
            if(ss[i] == 'L')
            {
                if(q - 1 < 0) {
                    flag = 0;
                    break;
                }
                swap(a[p][q], a[p][q-1]);
//                a[p][q] = a[p][q - 1];
//                a[p][q-1] = ' ';
                q--;
            }
            if(ss[i] == 'R')
            {
                if(q + 1 >= 5) {
                    flag = 0;
                    break;
                }
                swap(a[p][q], a[p][q+1]);
//                a[p][q] = a[p][q+1];
//                a[p][q+1] = ' ';
                q++;
            }
        }
        if(cas != 1)cout<<endl;
        printf("Puzzle #%d:\n",cas++);
        //cout<<flag<<endl;
        if(! flag)
        {
            printf("This puzzle has no final configuration.\n");
            continue;
        }
        for(int i = 0; i < 5; i ++)
        {
            for(int j = 0; j < 5; j ++)
            {
                cout<<a[i][j];
                if(j != 4)
                    cout<<' ';
            }
            cout<<endl;
        }
        //cout<<endl;
    }
    return 0;
}


猜你喜欢

转载自blog.csdn.net/qq_41444888/article/details/80518349