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;op[i]!=‘0‘;i++)
 11     {
 12         if(flag==0) break;
 13         else if(op[i]==‘A‘)
 14         {
 15             if(x-1>=0)
 16             {
 17                 tmp=map[x-1][y];
 18                 map[x-1][y]=‘ ‘;
 19                 map[x][y]=tmp;
 20                 x--;
 21             }
 22             else flag=0;
 23         }
 24         else if(op[i]==‘B‘)
 25         {
 26             if(x+1<=4)
 27             {
 28                 tmp=map[x+1][y];
 29                 map[x+1][y]=‘ ‘;
 30                 map[x][y]=tmp;
 31                 x++;
 32             }
 33             else flag=0;
 34         }
 35         else if(op[i]==‘R‘)
 36         {
 37             if(y+1<=4)
 38             {
 39                 tmp=map[x][y+1];
 40                 map[x][y+1]=‘ ‘;
 41                 map[x][y]=tmp;
 42                 y++;
 43             }
 44             else flag=0;
 45         }
 46         else if(op[i]==‘L‘)
 47         {
 48             if(y-1>=0)
 49             {
 50                 tmp=map[x][y-1];
 51                 map[x][y-1]=‘ ‘;
 52                 map[x][y]=tmp;
 53                 y--;
 54             }
 55             else flag=0;
 56         }
 57     }
 58 }
 59 int main()
 60 {
 61     k=1;
 62     while(gets(map[0]))
 63     {
 64         if(map[0][0]==‘Z‘&&map[0][1]==‘\0‘) break;
 65         for(int i=1;i<5;i++) gets(map[i]);
 66         for(int i=0;i<5;i++)
 67         {
 68             if(strlen(map[i])!=5)
 69             {
 70                 map[i][4]=‘ ‘;
 71                 break;
 72             }
 73         }
 74         cnt=0;
 75         while(c=getchar())
 76         {
 77             if(c<=‘Z‘&&c>=‘A‘) op[cnt++]=c;
 78             if(c==‘0‘)
 79             {
 80                 op[cnt++]=c;
 81                 getchar();break;  //0 之后还有一个回车需要读取!!
 82             }
 83         }
 84         for(int i=0;i<5;i++)
 85             for(int j=0;j<5;j++)
 86                 if(map[i][j]==‘ ‘)
 87                 {
 88                     x=i;y=j; break;
 89                 }
 90         fuc();
 91         if(k>1) puts("");
 92         printf("Puzzle #%d:\n",k++);
 93         if(flag==0) puts("This puzzle has no final configuration.");
 94         else
 95         {
 96             for(int i=0;i<5;i++)
 97             {
 98                 for(int j=0;j<4;j++)
 99                 {
100                     printf("%c ",map[i][j]);
101                 }
102                 printf("%c\n",map[i][4]);
103             }
104         }
105     }
106 }
107 /*
108 TRGSJ
109 XDOKI
110 M VLN
111 WPABE
112 UQHCF
113 ARRBBL0
114 ABCDE
115 FGHIJ
116 KLMNO
117 PQRS
118 TUVWX
119 AAA
120 LLLL0
121 ABCDE
122 FGHIJ
123 KLMNO
124 PQRS
125 TUVWX
126 AAAAABBRRRLL0
127 Z
128 */
时间: 2024-12-23 01:00:08

UVa - 227 - Puzzle的相关文章

UVA 227 Puzzle - 输入输出

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

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 Puzzle (UVA - 227)

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

uva 1399 - Puzzle(AC自动机)

题目链接:uva 1399 - Puzzle 题目大意:给定K和N,表示有K种不同的字符,N个禁止串,求一个最长的串使得该串不包含任何禁止串为子串.如果存在循环或者不能构成的话,输出No. 解题思路:建立AC自动机,然后在AC自动机上做dp,所有单词结尾节点为禁止点. #include <cstdio> #include <cstring> #include <queue> #include <algorithm> using namespace std;

UVA 1399 - Puzzle(AC自动机+DP)

UVA 1399 - Puzzle 题目链接 题意:给定一些字符串,求一个最长的不在包含这些子串的字符串,如果可以无限长输出No 思路:建ACM自动机,把不可走结点标记构造出来,然后在这个状态图上进行dp找出最长路径即可,至于无限长的情况,只要在dp前进行一次dfs判有没有环即可 代码: #include <cstdio> #include <cstring> #include <string> #include <algorithm> #include &

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 / 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

习题3-5 Puzzle UVA - 227

这题太能卡人了,都是输入输出卡的. 1.输入的5X5矩阵中,有时一行最后有多个空格和回车 2.输出格式中,每两个输出结果之间间隔一个空行,但是最后一个结果之后没有空行. 3.有时到第四位元素,直接不按空格,直接换行了. 其实思路很简单,先判断是否运动越界,如果是的话就输出无答案,如果没越界,就依次将空格和目标位置元素相互交换. 下面是AC代码,就是把这些小BUG修修补补改出来的,抛砖引玉吧. #include <bits/stdc++.h> #define N 7 #define M_N 10

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