UVa-227-谜题
这题的话,我们读入的时候,可以用scanf单个读入字符,也可以用getchar函数来读入。
scanf
scanf读入串字符的时候,遇到空格、回车和TAB等空白字符就会停止读入,但是如果读入单个字符就不会出现读入结束的情况,因为,我们就是用scanf函数来读入单个字符的,读入结果很理想。
getchar
如果是getchar的话,getchar本身就是读入字符,所以遇到回车和空格并没有什么问题。
注意
- 操作可以是多行的,所以注意对换行的处理
- 操作字符串里面读入至零之后,后面的回车要用getchar吸收,不然就作为下一组的第一个数据被读入了
- 对于操作我们一定要把所有的都读完,不能因为越界,就输出,然后中断读入,我们可以设置标记为否,然后一直读入,读完不做操作就行了
- getchar的速度快于scanf的速度
- PE问题,每个谜题的输入之间要有一个空行,第一行之前不要
getchar()版
#include <stdio.h>
char puzz[7][7];
int main()
{
int br,bc,er,ec,flag,cnt=1;
char ch;
while ((puzz[0][0]=getchar())!=EOF&&puzz[0][0]!='Z') {
for (int i=0;i<5;i++) {
for (int j=0;j<6;j++) {
if (i||j) puzz[i][j]=getchar();
if (puzz[i][j]==' ') {
br=i;er=i;
bc=j;ec=j;
}
}
}
flag=1;
while ((ch=getchar())!=EOF&&ch!='0') {
if (ch=='\n') continue;
if (flag==1) {
switch (ch) {
case 'A':
er--;
break;
case 'B':
er++;
break;
case 'L':
ec--;
break;
case 'R':
ec++;
break;
default:
flag=0;
break;
}
if (flag==0||er<0||er>4||ec<0||ec>4) {
flag=0;
continue;
}
puzz[br][bc]=puzz[er][ec];
puzz[er][ec]=' ';
br=er;
bc=ec;
}
}
getchar();
if (cnt!=1) {
printf("\n");
}
printf("Puzzle #%d:\n",cnt++);
if (flag==1) {
for (int i=0;i<5;i++) {
for (int j=0;j<6;j++) {
printf("%c",puzz[i][j]);
if (j<4) printf(" ");
}
}
}
else printf("This puzzle has no final configuration.\n");
}
return 0;
}
scanf()版
#include <stdio.h>
char puzz[7][7];
int main()
{
int br,bc,er,ec,flag,cnt=1;
char ch;
while (scanf("%c",&puzz[0][0])&&puzz[0][0]!='Z') {
for (int i=0;i<5;i++) {
for (int j=0;j<6;j++) {
if (i||j) scanf("%c",&puzz[i][j]);
if (puzz[i][j]==' ') {
br=i;er=i;
bc=j;ec=j;
}
}
}
// for (int i=0;i<5;i++) {
// for (int j=0;j<6;j++) {
// printf("%c",puzz[i][j]);
// }
// }
flag=1;
while (scanf("%c",&ch)&&ch!='0') {
if (ch=='\n') continue;
if (flag==1) {
switch (ch) {
case 'A':
er--;
break;
case 'B':
er++;
break;
case 'L':
ec--;
break;
case 'R':
ec++;
break;
default:
flag=0;
break;
}
if (flag==0||er<0||er>4||ec<0||ec>4) {
flag=0;
continue;
}
puzz[br][bc]=puzz[er][ec];
puzz[er][ec]=' ';
br=er;
bc=ec;
}
}
getchar();
if (cnt!=1) {
printf("\n");
}
printf("Puzzle #%d:\n",cnt++);
if (flag==1) {
for (int i=0;i<5;i++) {
for (int j=0;j<6;j++) {
printf("%c",puzz[i][j]);
if (j<4) printf(" ");
}
}
}
else printf("This puzzle has no final configuration.\n");
}
return 0;
}
UVa-227-谜题的更多相关文章
- UVA 227 Puzzle(基础字符串处理)
题目链接: https://cn.vjudge.net/problem/UVA-227 /* 问题 输入一个5*5的方格,其中有一些字母填充,还有一个空白位置,输入一连串 的指令,如果指令合法,能够得 ...
- uva 227 Puzzle
Puzzle A children's puzzle that was popular 30 years ago consisted of a 5x5 frame which contained ...
- UVA 227 Puzzle - 输入输出
题目: acm.hust.edu.cn/vjudge/roblem/viewProblem.action?id=19191 这道题本身难度不大,但输入输出时需要特别小心,一不留神就会出问题. 对于输入 ...
- UVA 227 周期串
题意: 给一个字符串,寻找最短的循环节 如abcabcabcabc以3为周期,也按6和12为周期. 分析: 因为循环节肯定是相等的,所以枚举串长度的所有约数的循环节再判断是否相等即可. 我的方法是枚举 ...
- uva 227 Puzzle (UVA - 227)
感慨 这个题实在是一个大水题(虽然说是世界决赛真题),但是它给出的输入输出数据,标示着老子世界决赛真题虽然题目很水但是数据就能卡死你...一直pe pe直到今天上午AC...无比感慨...就是因为最后 ...
- Puzzle UVA - 227 PE代码求大佬指点
A children's puzzle that was popular 30 years ago consisted of a 5×5 frame which contained 24 smal ...
- UVa 11549 计算器谜题(Floyd判圈算法)
https://vjudge.net/problem/UVA-11549 题意: 有一个老式计算器,只能显示n位数字,输入一个整数k,然后反复平方,如果溢出的话,计算器会显示结果的最高n位.如果一直这 ...
- UVa 10012 - How Big Is It? 堆球问题 全排列+坐标模拟 数据
题意:给出几个圆的半径,贴着底下排放在一个长方形里面,求出如何摆放能使长方形底下长度最短. 由于球的个数不会超过8, 所以用全排列一个一个计算底下的长度,然后记录最短就行了. 全排列用next_per ...
- Fast Matrix Operations(UVA)11992
UVA 11992 - Fast Matrix Operations 给定一个r*c(r<=20,r*c<=1e6)的矩阵,其元素都是0,现在对其子矩阵进行操作. 1 x1 y1 x2 y ...
- Android Weekly Notes Issue #227
Android Weekly Issue #227 October 16th, 2016 Android Weekly Issue #227. 本期内容包括: Google的Mobile Vision ...
随机推荐
- 执行gulp build报错
问题与分析 在执行gulp build报错如下: D:\coding\Resume\Resumes>gulp build gulp build[5628]: src\node_contextif ...
- ERROR: Could not connect to lockdownd, error code -19 -20
执行命令行 brew install libimobiledevice --HEAD
- Codeforces 1136E(转化+线段树维护)
题目传送 虽然线段树比较显然但是发现a数组并不好维护.考虑将a转化为好维护的数组b. 方法 这里我将k[1]设为0,对应着\[a[1] + k[1] <= a[2]\]不难得出\[a[i] + ...
- 洛谷 P1053 篝火晚会
https://www.luogu.org/problemnew/show/P1053 错误记录:判-1的时候出了些问题(比如只判了图是否连通):数组没清空 #include<cstdio> ...
- FTP任务(重点看断点续传)
一.FTP任务目录: 1. 多用户同时登陆: socketserver 2. 用户登陆,加密认证: md5加密 3. 上传/下载文件,保证文件一致性:md5摘要 4. 传输过程中现实进度条 5 ...
- 玲珑杯”ACM比赛 Round #4 1054 - String cut 暴力。学到了扫描的另一种思想
http://www.ifrog.cc/acm/problem/1054 问删除一个字符后的最小循环节是多少. 比赛的时候想不出,不知道怎么暴力. 赛后看了别人代码才晓得.唉,还以为自己字符串还不错, ...
- Unity Shader入门精要学习笔记 - 第10章 高级纹理
转载自 冯乐乐的 <Unity Shader入门精要> 立方体纹理 在图形学中,立方体纹理是环境映射的一种实现方法.环境映射可以模拟物体周围的环境,而使用了环境映射的物体可以看起来像镀了层 ...
- Java编程基础-变量
1.变量的定义. 变量与常量相对应,变量是在程序运行过程中它的值允许改变的量,变量可以通过变量名访问. 2.Java中的三大变量 (1).类变量.又称为静态变量,在类中定义类的属性时,使用static ...
- 【学习笔记】八:浏览器对象模型BOM
1.window对象 window是BOM的核心,它既是JS访问浏览器的一个接口,又是ES规定的Global对象. 1)全局作用域对象 a.所有在全局作用域中声明的变量.函数都会成为window对象的 ...
- Android中的ListView属性使用总结
Android中使用ListView控件比较常见,如果能知道常用的一些属性使用,肯定会少很多坑. 1.ListView是常用的显示控件,默认背景是和系统窗口一样的透明色,如果给ListView加上背景 ...