习题3-5 Puzzle UVA - 227

这题太能卡人了,都是输入输出卡的。

1.输入的5X5矩阵中,有时一行最后有多个空格和回车

2.输出格式中,每两个输出结果之间间隔一个空行,但是最后一个结果之后没有空行。

3.有时到第四位元素,直接不按空格,直接换行了。

其实思路很简单,先判断是否运动越界,如果是的话就输出无答案,如果没越界,就依次将空格和目标位置元素相互交换。

下面是AC代码,就是把这些小BUG修修补补改出来的,抛砖引玉吧。

#include <bits/stdc++.h>
#define N 7
#define M_N 100005
using namespace std;
char ch[N][N],dic[M_N];
pair<int,int> now;
bool scf(),fg;
int main()  {
    //freopen("input.txt","ra",stdin);
    //freopen("output.txt","wa",stdout);
    int dd=0;
    while (scf())   {
        char c;
        int cnt=0;
        while ((c=getchar())&&c!=‘0‘)
            dic[cnt++]=c;
        getchar();
        dic[cnt]=‘\0‘;
        bool flag=true;
        int len=strlen(dic);
        for (int i=0;i<len;i++) {
            if (!isalpha(dic[i]))   continue;
            int ti=now.first,tj=now.second;
            switch(dic[i])    {
                case ‘A‘: ti--;break;
                case ‘B‘: ti++;break;
                case ‘L‘: tj--;break;
                case ‘R‘: tj++;break;
                default: {
                    flag=false;
                    goto ed;
                }
            }
            if (ti<0||ti>4||tj<0||tj>4) {
                flag=false;
                break;
            }
            swap(ch[now.first][now.second],ch[ti][tj]);
            now.first=ti,now.second=tj;
        }
        ed:;
        printf("Puzzle #%d:\n",++dd);
        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");
            }
        }
        else    printf("This puzzle has no final configuration.\n");
    }
    return 0;
}

bool scf()  {
    fill(ch[0],ch[0]+N*N,‘\0‘);
    for (int i=0;i<5;i++)   {
        gets(ch[i]);
        if (strlen(ch[i])==1)   return false;
        for (int j=0;j<5;j++)   {
            if (ch[i][j]==‘\n‘) ch[i][j]=‘ ‘;
            if (ch[i][j]==‘ ‘)
                now.first=i,now.second=j;
        }
        ch[i][5]=‘\0‘;
    }
    if (fg)   printf("\n");
    fg=true;
    return true;
}

原文地址:https://www.cnblogs.com/yichuan-sun/p/9641538.html

时间: 2024-09-30 09:55:28

习题3-5 Puzzle UVA - 227的相关文章

Puzzle UVA - 227

A children's puzzle that was popular 30 years ago consisted of a 5×5 frame which contained 24 small squares of equal size. A unique letter of the alphabet was printed on each small square. Since there were only 24 squares within the frame, the frame

uva 227 Puzzle (UVA - 227)

感慨 这个题实在是一个大水题(虽然说是世界决赛真题),但是它给出的输入输出数据,标示着老子世界决赛真题虽然题目很水但是数据就能卡死你...一直pe pe直到今天上午AC...无比感慨...就是因为最后一行不能空行. 题目大意 这个题目说的是有这么一个55的正方形里面有24个小正方形和一个空,然后这个游戏本来的意思是要通过移动把所有的正方形(每一个都印着一个字母)按照字母表的顺序排列好,但是这个题它放水了,没有让你去找怎么移动,而是仅仅给你一些指令去看看这些指令过后这个55的版是什么样子...em

UVa - 227 - Puzzle

给空格子上下左右的互换操作,问最后是怎样的 注意一行的最后一个若是空格,需要自己加注意读取时 操作可能分好多行,一定要读取到 0 为止 1 #include <iostream> 2 #include <cstring> 3 using namespace std; 4 char map[50][50],op[1000],c,tmp; 5 int k,t,x,y,cnt; 6 bool flag; 7 void fuc() 8 { 9 flag=1; 10 for(int i=0;

UVA 227 Puzzle - 输入输出

题目: acm.hust.edu.cn/vjudge/roblem/viewProblem.action?id=19191 这道题本身难度不大,但输入输出时需要特别小心,一不留神就会出问题. 对于输入,如果要读入一行时: 没有空白字符,则直接使用scanf和%s即可: 有空白字符,使用gets,但要小心溢出:fgets一直不能正常工作,有待研究(gets会将缓冲区多余的\n扔掉,fgets会保留在字符串中): 对于要读入单个字符时: 使用scanf和“ %c”进行舍弃空白字符(注意空格),并且最

UVa 227 / UVALive 5166 Puzzle 谜题 (结构体)

Puzzle Time Limit: 3000MS   Memory Limit: Unknown   64bit IO Format: %lld & %llu Description   A children's puzzle that was popular 30 years ago consisted of a 5x5 frame which contained 24 small squares of equal size. A unique letter of the alphabet

UVA 227 Puzzle(基础字符串处理)

题目链接: https://cn.vjudge.net/problem/UVA-227 1 /* 2 问题 输入一个5*5的方格,其中有一些字母填充,还有一个空白位置,输入一连串 3 的指令,如果指令合法,能够得到一个移动后的方格就输出方格,不能就输出 4 "This puzzle has no final configuration." 5 6 解题思路 7 模拟,一个一个的读入字符,包括空格,再读入若干行指令,如果指令表面合法,进入模拟看内容是否合法,不合法直接输出提示. 8 9

UVA 227

这道题虽然思路简单,但是想要A却不简单,因为对格式的要求比较让人头疼 #include <iostream> #include<stdio.h> #include<stdlib.h> #include<string> #include<string.h> #include<set> using namespace std; int main() { int n,si,sj,flag,visi; char m[6][8]; int nu

算法导论第四版学习——习题四8 Puzzle

题目正文: http://coursera.cs.princeton.edu/algs4/assignments/8puzzle.html 作业难点: 1.如何验证Puzzle是否可解?题目中有提示,如果相邻两个格子交换后得到的“Twin Puzzle”进行求解,如果Twin有解那么原始Puzzle就无解. 作业技巧: 1.checklist提到把Twin Puzzle和Puzzle放在一个Priority Queue中,其实就是在设计自己的Node数据结构的时候加一个boolean类型标识是否

UVa第五章STL应用 习题((解题报告))详细!

例题5--9 数据库 Database UVa 1592 <strong><span style="font-size:18px;"><span style="font-size:18px;"><strong><span style="font-size:18px;">#include<iostream> #include<string> #include<