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 ...
随机推荐
- [转]CENTOS6 VNCSERVER安装
标签:vncservercentos6.0 ssh隧道 vncviewer centos 休闲 职场 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律 ...
- 50中制作图表的JS库
参看以下链接:http://www.tuicool.com/articles/FZNjMz
- knockout.js简单实用教程1
第一次接触knockout是在一年多之前吧.当时是接手了一个别人的项目,在项目中有用到knockout来进行数据的绑定.也就开始学习起来knockout.在之后的项目中也多次用到了这个.在第一次开始学 ...
- c#以文件流的形式输出xml(可以解决内存溢出)-XmlTextWriter
1.XmlTextWriter 表示提供快速.非缓存.只进方法的编写器,该方法生成包含 XML 数据(这些数据符合 W3C 可扩展标记语言 (XML) 1.0 和“XML 中的命名空间”建议)的流或文 ...
- RHEL 7.0 修改防火墙配置
RHEL 7.0默认使用的是firewall作为防火墙,这里改为iptables防火墙. 关闭firewall: systemctl stop firewalld.service #停止firewal ...
- Java程序员需要学习的知识点
Java是全世界最受欢迎的3大编程语言之一,它可以开发出许多实用的WEB应用程序和桌面应用程序,更重要的一点,Java是跨平台的语言——编写一次,可以再任何地方运行.另外,Java也很容易入门,如果你 ...
- TD数量不确定时如何让其宽度平均分布
D数量不确定时如何让其宽度平均分布?答案很简单,我们只要在table里面加上一下代码就可以实现. table { width: 100%; table-layout: fixed; }
- C# ref_out_params方法的参数_4种类型的参数
之前学习C#没有做笔记的习惯,因此有些基础上的东西并没有很好地整理起来,虽然这些东西比较常用,因此也没什么影响,但总觉得不整理一下感觉老是有种陌生感.今天特别整理一下C#4种类型的参数. 一.按值传递 ...
- Android 匿名共享内存Java接口分析
在Android 匿名共享内存驱动源码分析中介绍了匿名共享内存的驱动实现过程,本文在Android匿名共享内存驱动基础上,介绍Android匿名共享内存对外Android系统的匿名共享内存子系统的主体 ...
- EF中读取随机数据的问题
_list.Where(a=>a.级别=="1").OrderBy(a => Guid.NewGuid()).Take(10);