UVa-227-谜题
2024-09-26 21:12:51
这题的话,我们读入的时候,可以用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;
}
最新文章
- 动态添加LinearLayout的高度
- 关于ORACLE中配置文件的问题
- 转-Asp.Net MVC及Web API框架配置会碰到的几个问题及解决方案
- Centos 6.4 32位 gcc 升级(已验证)
- (一)Qt界面设计布局
- Eclipse开发Python项目
- JavaScript面向对象编程(二)构造函数和类
- mybatis学习笔记四(动态sql)
- WGCNA算法研究笔记
- sudoku--设想
- [mysql使用(2)] mysql的一些语法与Oracle的差别
- java中抽象类和接口之间的异同点
- CentOS 7 安装samba服务
- Zabbix调优不完全指南(https://www.jianshu.com/p/2d911d55448f)
- C# -- 使用Aspose.Cells创建和读取Excel文件
- #6279. 数列分块入门 3(询问区间内小于某个值 xx 的前驱(比其小的最大元素))
- (钉钉)第三方WEB网站扫码登录
- linux 程序实现后台运行
- noip第21课作业
- windows 64bit 服务器下安装32位oracle database 11g 问题集