UVA 227 Puzzle - 输入输出

题目:

acm.hust.edu.cn/vjudge/roblem/viewProblem.action?id=19191

这道题本身难度不大,但输入输出时需要特别小心,一不留神就会出问题。

对于输入,如果要读入一行时:

没有空白字符,则直接使用scanf和%s即可;

有空白字符,使用gets,但要小心溢出;fgets一直不能正常工作,有待研究(gets会将缓冲区多余的\n扔掉,fgets会保留在字符串中);

对于要读入单个字符时:

使用scanf和“ %c”进行舍弃空白字符(注意空格),并且最后需要getchar来吃掉最后的回车;

scanf和“%c”会读入空白字符,和getchar相同。

我心中的理想代码如下:

 1 #include<stdio.h>
 2 #include<string.h>
 3 const int LEN=5;
 4 const int MAX=100;
 5 const int y[]={0,0,1,-1};
 6 const int x[]={-1,1,0,0};
 7 char map[LEN][LEN];
 8 int tra[110];
 9 bool legal(int pos){
10     return 0<=pos&&pos<LEN;
11 }
12 void Pmap(){
13     for(int cow=0;cow<LEN;cow++){
14         printf("%c",map[cow][0]);
15         for(int col=1;col<LEN;col++)
16             printf(" %c",map[cow][col]);
17         printf("\n");
18     }
19 }
20 int main(){
21     tra[‘A‘]=0;
22     tra[‘B‘]=1;
23     tra[‘R‘]=2;
24     tra[‘L‘]=3;
25
26     bool first=true;
27     int Case=0;
28     //freopen("in","r",stdin);
29     //freopen("out","w",stdout);
30     int bx,by;
31     while(gets(map[0])){
32         if(map[0][0]==‘Z‘)break;
33         for(int col=1;col<LEN;col++)
34             gets(map[col]);
35         for(int i=0;i<LEN;i++)
36             for(int j=0;j<LEN;j++)
37                 if(map[i][j]==‘ ‘){
38                     bx=i;by=j;
39                 }
40         bool ok=true;
41         char c;
42         while(scanf(" %c",&c),c!=‘0‘){
43             if(!ok)continue;
44             int nx=bx+x[tra[c]],ny=by+y[tra[c]];
45             if(!legal(nx)||!legal(ny)){
46                 ok=false;
47                 continue;
48             }
49             map[bx][by]=map[nx][ny];
50             map[nx][ny]=‘ ‘;
51             bx=nx;by=ny;
52         }
53         getchar();
54         if(first)
55             first=false;
56         else
57             printf("\n");
58         printf("Puzzle #%d:\n",++Case);
59         if(ok)
60             Pmap();
61         else
62             printf("This puzzle has no final configuration.\n");
63     }
64     return 0;
65 }
时间: 2024-10-21 21:11:32

UVA 227 Puzzle - 输入输出的相关文章

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(基础字符串处理)

题目链接: 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 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