POJ 1573 (13.10.11)
Description
A robot has been programmed to follow the instructions in its path. Instructions for the next direction the robot is to move are laid down in a grid. The possible instructions are
N north (up the page)
S south (down the page)
E east (to the right on the page)
W west (to the left on the page)
For example, suppose the robot starts on the north (top) side of Grid 1 and starts south (down). The path the robot follows is shown. The robot goes through 10 instructions in the grid before leaving the grid.
Compare what happens in Grid 2: the robot goes through 3 instructions only once, and then starts a loop through 8 instructions, and never exits.
You are to write a program that determines how long it takes a robot to get out of the grid or how the robot loops around.
Input
Output
Sample Input
3 6 5
NEESWE
WWWESS
SNWWWW
4 5 1
SESWE
EESNW
NWEEN
EWSEN
0 0 0
Sample Output
10 step(s) to exit
3 step(s) before a loop of 8 step(s)
题意: 不难理解, 我简单说说, 给出r行c列, 然后从第一行的第i个位置开始走
每个位置有标记E W S N, 分别表示向东, 向西, 向南, 向北
然后, 有两种情况, 一种能走出去, 一种是陷入死循环
做法: 每一步都标上是第几步走的就OK了~ 然后按题意模拟~
AC代码:
#include<stdio.h> char str[100][100]; int main() {
int r, c, in;
while(scanf("%d %d %d", &r, &c, &in) != EOF) {
if(r == 0 && c ==0 && in == 0)
break;
getchar();
for(int i = 0; i < r; i++)
gets(str[i]);
int tr, tc, loop;
int step = 0;
int mark = 1;
tr = 0; tc = in-1; while(1) {
if(str[tr][tc] == 'E') {
step++;
str[tr][tc] = step + '0';
if(tc == c-1)
break;
else
tc = tc + 1;
}
else if(str[tr][tc] == 'W') {
step++;
str[tr][tc] = step + '0';
if(tc == 0)
break;
else
tc = tc - 1;
}
else if(str[tr][tc] == 'S') {
step++;
str[tr][tc] = step + '0';
if(tr == r-1)
break;
else
tr = tr + 1;
}
else if(str[tr][tc] == 'N') {
step++;
str[tr][tc] = step + '0';
if(tr == 0)
break;
else
tr = tr - 1;
}
else {
mark = 0;
loop = str[tr][tc] - '0' - 1;
printf("%d step(s) before a loop of %d step(s)\n", loop, step - loop);
break;
}
}
if(mark == 1)
printf("%d step(s) to exit\n", step);
}
return 0;
}
最新文章
- VMware ubuntu中执行python文件的操作小结
- C# 多线程线程池( 一 )
- 关于treeview手动添加的方法
- 下拉更新列表Android-PullToRefresh
- HTTP深入浅出 http请求
- .NET验证码控件(美观 易用)
- Android进阶笔记02:Android 网络请求库的比较及实战(二)
- moveToThread的最简单用法(依葫芦画瓢即可)(使得线程也更偏向于信号槽的使用方法)
- A+B II
- Spark性能优化之道——解决Spark数据倾斜(Data Skew)的N种姿势
- Wp-UserAgent——让WordPress在评论后面加上浏览器和操作系统信息
- Cannot create a session after the response has been committed
- shell脚本--输入与输出
- C# Null 赋值
- 【Cesium】物体显示
- VK Cup 2016 - Qualification Round 2 B. Making Genome in Berland
- 51nod 1043 幸运号码(数位dp
- 使用GNU工具链进行嵌入式裸机开发
- 【Java面试题】29 设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。
- Wex5短信验证
热门文章
- ACM - ICPC World Finals 2013 C Surely You Congest
- maven常用构建命令
- 修改数据库中group_concat的返回结果的长度限制
- C扩展Python - official docs - defining new type
- 【C#学习笔记】写文件
- 【jQuery】总结:筛选器、控制隐藏、操作元素style属性
- Android-取消GridView/ListView item被点击时的效果
- 阿里云容器服务--配置自定义路由服务应对DDOS攻击
- 浅析android下如何通过jni监控wifi网络连接、dhcpcd执行和power电源控制
- 查询MySQL锁等待的语句