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 ...
随机推荐
- String.format Tutorial
String format(String format, Object... args) The format specifiers for general, character, and numer ...
- JQuery阻止表单提交的方法总结 - 使用onsubmit()验证表单并阻止非法提交
方法1:<form onsubmit="javascript:confirm()"> 方法内返回false阻止表单提交 示例:代码检测textarea内填写的长度,未填 ...
- python之安装
1.python控制软件pyenv 依赖软件:git [root@localhost ~]# curl https://raw.github.com/yyuu/pyenv-installer/mast ...
- C#基础之------进制转换
/************************ File:控制台进制类型转换实现 Time:2014年8月12日 Author:小X ****************************/ 代 ...
- display:table-cell的惊天作用,直接惊呆你!
一 display:table-cell介绍 ... 二 用法 (1)高度不固定元素,垂直居中 ... (2)高度不固定列表元素,登高排列 ... (3)宽度不固定元素,平均分配 ...
- USB系列之八:透过ASPI执行SCSI命令
在<USB系列之七>里我们介绍了ASPI的规范,并对一系列ASPI的命令做了测试,其中的02号命令是执行SCSI命令,我们专门在这篇文章中介绍,在<USB系列七>中,我们已经了 ...
- 分布式文件系统MooseFS安装步骤
1. 安装 1.1 准备安装环境 首先选择一台比较好的服务器做master,如果可以在选择一台做为master的备份服务器最好.然后其他的服务器当chunkserver. 为了方便说明问题,我这 ...
- Delphi中动态创建的Panel无法改变颜色的解决办法(要把Panel的ParentBackground设为False)
刚开始代码如下: procedure TForm1.Button1Click(Sender: TObject); var Panel: TPanel; begin Panel := TPanel.Cr ...
- 【Mysql 调用存储过程,输出参数的坑】
玛德,数据行都返回过来了,就是没有输出参数!!! 扒官方设计文档:这么一段 雷死人了!!! When a stored procedure is called using MySqlCommand.E ...
- 使用sp_configure启用 'Ad Hoc Distributed Queries'
使用sp_configure启用 'Ad Hoc Distributed Queries' 原文地址:http://blog.sina.com.cn/s/blog_531bb7630100xh88.h ...