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 易错点
 10 读入和控制结束问题,注意读入指令后有一个换行需要处理
 11 输出格式,将换行放在谜题数前面
 12 */
 13 #include<cstdio>
 14 #include<cstring>
 15
 16 int check(char *s);
 17 int move(char e[][11],int x, int y,char *s);
 18 int main()
 19 {
 20     char e[11][11],s1[100],s[1100],ch;
 21     int i,j,flag,t=0,x,y,lens;
 22     while(1){
 23         for(i=1;i<=5;i++){
 24             gets(e[i]+1);
 25             if(i == 1 && e[1][1] == ‘Z‘){
 26                 return 0;//控制结束
 27             }
 28         }
 29
 30         //整合指令
 31         memset(s,0,sizeof(char)*1100);
 32         memset(s1,0,sizeof(char)*100);
 33         while(1){
 34             scanf("%s",s1);
 35             strcat(s,s1);
 36             lens=strlen(s);
 37             if(s[lens-1] == ‘0‘)
 38                 break;
 39         }
 40         getchar();//注意吃掉一个换行
 41
 42         //找到空白位置
 43         for(i=1;i<=5;i++){
 44             for(j=1;j<=5;j++){
 45                 if(e[i][j] == ‘ ‘){
 46                     x=i;
 47                     y=j;
 48                 }
 49             }
 50         }
 51
 52         if(t != 0)//注意格式
 53             printf("\n");
 54
 55         printf("Puzzle #%d:\n",++t);
 56         if(check(s)){
 57             if(move(e,x,y,s))
 58                 for(i=1;i<=5;i++){
 59                     for(j=1;j<=5;j++){
 60                         if(j == 1)
 61                             printf("%c",e[i][j]);
 62                         else
 63                             printf(" %c",e[i][j]);
 64                     }
 65                     printf("\n");
 66                 }
 67             else
 68                 printf("This puzzle has no final configuration.\n");
 69         }
 70         else
 71             printf("This puzzle has no final configuration.\n");
 72     }
 73     return 0;
 74 }
 75
 76 int move(char e[][11],int x, int y,char *s){
 77     int len=strlen(s),i;
 78     for(i=0;i<len-1;i++){
 79         if(s[i] == ‘A‘){
 80             if(x-1 < 1) return 0;
 81             e[x][y]=e[x-1][y];
 82             e[x-1][y]=‘ ‘;
 83             x--;
 84         }
 85         else if(s[i] == ‘B‘){
 86             if(x+1 > 5) return 0;
 87             e[x][y]=e[x+1][y];
 88             e[x+1][y]=‘ ‘;
 89             x++;
 90         }
 91         else if(s[i] == ‘R‘){
 92             if(y+1 > 5) return 0;
 93             e[x][y]=e[x][y+1];
 94             e[x][y+1]=‘ ‘;
 95             y++;
 96         }
 97         else if(s[i] == ‘L‘){
 98             if(y-1 < 1) return 0;
 99             e[x][y]=e[x][y-1];
100             e[x][y-1]=‘ ‘;
101             y--;
102         }
103     }
104     return 1;
105 }
106
107 int check(char *s)
108 {
109     int len=strlen(s),i;
110     for(i=0;i<len-1;i++){
111         if(s[i] != ‘A‘ && s[i] != ‘B‘ && s[i] != ‘R‘ && s[i] != ‘L‘)
112             return 0;
113     }
114     return 1;
115 }

原文地址:https://www.cnblogs.com/wenzhixin/p/8854968.html

时间: 2024-12-23 01:00:07

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

给空格子上下左右的互换操作,问最后是怎样的 注意一行的最后一个若是空格,需要自己加注意读取时 操作可能分好多行,一定要读取到 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 (UVA - 227)

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

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

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

UVa 489 Hangman Judge(字符串)

 Hangman Judge  In ``Hangman Judge,'' you are to write a program that judges a series of Hangman games. For each game, the answer to the puzzle is given as well as the guesses. Rules are the same as the classic game of hangman, and are given as follo

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;

Java基础——字符串正则及Scanner

1.正则表达式 1.1.基础 字符串处理问题一般集中在匹配.选择.编辑于验证上,而正则表达式提供了一种完全通用的方式来解决这些问题 正则表达式就是以某种模式描述字符串,因此你可以说:“如果一个字符串含有这些东西,那么它就是我要找的东西”.例如我们可以用一下模式匹配数字:(-|\\+)?\\d+,他可以匹配任意整数. 测试如下: public class IntegerMatch { public static void main(String[] args) { System. out.prin

uva 11997 (基础数据结构)

题意: 有一个k*k 的方阵,让你从当中每一行挑选一个数字相加最后能得到K^K次方的和,输出其中最小的k个. 思路:先对每一行排序然后两两归并,每次取前k个再和下一行再进行归并.在归并的时候用一个优先队列维护最大的k个值每次先放k个进去然后一次每行和队顶比较,若是小则替换否则break最后输出即可. 代码如下: 1 #include <stdio.h> 2 #include <algorithm> 3 #include <iostream> 4 #include <

[1][python基础]字符串和编码[2]

[1][python基础]字符串和编码[2] 字符编码 我们已经讲过了,字符串也是一种数据类型,但是,字符串比较特殊的是还有一个编码问题. 因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理.最早的计算机在设计时采用8个比特(bit)作为一个字节(byte),所以,一个字节能表示的最大的整数就是255(二进制11111111=十进制255)如果要表示更大的整数,就必须用更多的字节.比如两个字节可以表示的最大整数是65535,4个字节可以表示的最大整数是4294967295.