N - Robot Motion(第二季水)
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
NEESWE
WWWESS
SNWWWW
4 5 1
SESWE
EESNW
NWEEN
EWSEN
0 0
Sample Output
#include<iostream>
#include<string.h>
using namespace std;
char str[][];
int x[],y[],p,q;
void f(char ch)
{
if(ch=='N')p--;
if(ch=='S')p++;
if(ch=='E')q++;
if(ch=='W')q--;
}
int main()
{
int m,n,l,i,k,t;
while(cin>>m>>n){
if(m==&&n==)break;
cin>>l;
x[]=;
y[]=l-;
memset(str,'\0',sizeof(str));
for(i=;i<m;i++){
for(int j=;j<n;j++)cin>>str[i][j];
}
k=;
while(){
p=x[k];
q=y[k];
f(str[x[k]][y[k]]);
if(p<||p==m||q<||q==n){
cout<<k+<<" step(s) to exit"<<endl;
break;
}
t=;
for(i=;i<k;i++){
if(x[k]==x[i]&&y[k]==y[i]){
t=i;
break;
}
}
if(t!=){
cout<<t<<" step(s) before a loop of "<<k-t<<" step(s)"<<endl;
break;
}
k++;
x[k]=p;
y[k]=q;
}
}
return ;
}
检查半天没有结果,就换一种方法来写,结果 超时
#include<iostream>
#include<string.h>
#include<stdio.h>
using namespace std;
char str[][];
int x[][];
int main()
{
int m,n,l;
while(scanf("%d%d",&m,&n)){
if(m==&&n==)break;
scanf("%d",&l);
memset(str,'\0',sizeof(str));
memset(x,,sizeof(x));
int p=,q=l-,k=;
for(int i=;i<m;i++)scanf("%s",str[i]);
while()
{
k++;
if(str[p][q]=='N'&&!x[p][q]){
x[p][q]=k;
p--;
}
else if(str[p][q]=='S'&&!x[p][q]){
x[p][q]=k;
p++;
}
else if(str[p][q]=='E'&&!x[p][q]){
x[p][q]=k;
q++;
}
else if(str[p][q]=='W'&&!x[p][q]){
x[p][q]=k;
q--;
}
else if(x[p][q]){
printf("%d step(s) before a loop of %d step(s)\n",x[p][q]-,k-x[p][q]);
break;
}
else if(p<||q<||p==n||q==m){
printf("%d step(s) to exit\n",k-);
break;
} }
}
return ;
}
最后最后的正确代码,分四个情况,每次移动后都判断是否越界,不越界就走下一步,越界就分情况输出结果
#include<stdio.h>
#include<string.h>
char map[][];
int t[][];
int main()
{
int n,m,k;
int x,y;
while(scanf("%d%d",&n,&m)!=EOF&&(m+n)){
scanf("%d",&k);
for(int i=;i<n;i++) scanf("%s",&map[i]);
x=;
y=k-;
memset(t,,sizeof(t));
t[x][y]=;
while(){
if(map[x][y]=='E'){
y++;
if(y==m){
printf("%d step(s) to exit\n",t[x][y-]);
break;
}
if(t[x][y]!=){
printf("%d step(s) before a loop of %d step(s)\n",t[x][y]-,t[x][y-]-t[x][y]+);
break;
}
t[x][y]=t[x][y-]+;
}
else if(map[x][y]=='W'){
y--;
if(y<){
printf("%d step(s) to exit\n",t[x][y+]);
break;
}
if(t[x][y]!=){
printf("%d step(s) before a loop of %d step(s)\n",t[x][y]-,t[x][y+]-t[x][y]+);
break;
}
t[x][y]=t[x][y+]+;
}
else if(map[x][y]=='N'){
x--;
if(x<) {
printf("%d step(s) to exit\n",t[x+][y]);
break;
}
if(t[x][y]!=){
printf("%d step(s) before a loop of %d step(s)\n",t[x][y]-,t[x+][y]-t[x][y]+);
break;
}
t[x][y]=t[x+][y]+;
}
else{
x++;
if(x==n){
printf("%d step(s) to exit\n",t[x-][y]);
break;
}
if(t[x][y]!=){
printf("%d step(s) before a loop of %d step(s)\n",t[x][y]-,t[x-][y]-t[x][y]+);
break;
}
t[x][y]=t[x-][y]+;
}
}
}
return ;
}
题不难,注意思路!!!
N - Robot Motion(第二季水)的更多相关文章
- F - The Fun Number System(第二季水)
Description In a k bit 2's complement number, where the bits are indexed from 0 to k-1, the weight o ...
- D - Counterfeit Dollar(第二季水)
Description Sally Jones has a dozen Voyageur silver dollars. However, only eleven of the coins are t ...
- S - 骨牌铺方格(第二季水)
Description 在2×n的一个长方形方格中,用一个1× 2的骨牌铺满方格,输入n ,输出铺放方案的总数. 例如n=3时,为2× 3方格,骨牌的铺放方案有三种, ...
- R - 一只小蜜蜂...(第二季水)
Description 有一只经过训练的蜜蜂只能爬向右侧相邻的蜂房,不能反向爬行.请编程计算蜜蜂从蜂房a爬到蜂房b的可能路线数. 其中,蜂房的结构如下所示. ...
- I - Long Distance Racing(第二季水)
Description Bessie is training for her next race by running on a path that includes hills so that sh ...
- Y - Design T-Shirt(第二季水)
Description Soon after he decided to design a T-shirt for our Algorithm Board on Free-City BBS, XKA ...
- B - Maya Calendar(第二季水)
Description During his last sabbatical, professor M. A. Ya made a surprising discovery about the old ...
- T - 阿牛的EOF牛肉串(第二季水)
Description 今年的ACM暑期集训队一共有18人,分为6支队伍.其中有一个叫做EOF的队伍,由04级的阿牛.XC以及05级的COY组成.在共同的集训生活中,大家建立了深厚的 ...
- E - Number Sequence(第二季水)
Description A single positive integer i is given. Write a program to find the digit located in the p ...
随机推荐
- doGet和doPost的区别
1.doGet和doPost的区别,在什么时候调用,为什么有时doPost中套用doGet 2.提交的form method=Post就执行DOPOST,否则执行GOGET 套用是不管meth ...
- 南阳oj-喷水装置(一)
喷水装置(一) 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 现有一块草坪,长为20米,宽为2米,要在横中心线上放置半径为Ri的喷水装置,每个喷水装置的效果都会让以 ...
- DOM 对象之 document.all
1.document.all是页面内所有元素的一个集合: 2.经测试在chrome,safari,opera,ie中均返回一个HTMLALLCollection[xx]对象,在FF中返回是一个unde ...
- GitHub项目协作基本步骤
1.查找某个项目,然后Fork 2.打开GitHub For Windows,发现刚才Fork的项目 3.对着项目点击Clone,将之复制至本地 4.使用Eclipse等进行开发,如新增一个文件 5. ...
- 网易2014校园招聘杭州Java笔试题
10) ABC http://soft.chinabyte.com/os/56/12516056.shtml 11) BD. 12) AC. http://blog.sina.com.cn/s/blo ...
- 阿里巴巴JAVA常考面试题及汇总答案
一.String,StringBuffer, StringBuilder 的区别是什么?String为什么是不可变的? 答: 1.String是字符串常量,StringBuffer和StringB ...
- I2C串行总线标准驱动程序(C51)-万能程序
#include "reg51.h" #include "intrins.h" unsigned char SystemError; sbit SCL= P1^ ...
- Qt Project的持续集成方案
作者:齐亮链接:http://www.zhihu.com/question/24314354/answer/27547787来源:知乎著作权归作者所有,转载请联系作者获得授权. PETER HARTM ...
- B-JUI(Best jQuery UI) 前端框架
From :http://b-jui.com/大略看了下还不错,收藏之.
- Skulpt
Skulpt Python. Client side. Skulpt is an entirely in-browser implementation of Python. No preprocess ...