C语言-机器人OJ题目

博客围绕C语言机器人OJ题目展开,介绍机器人按给定指令在网格中移动的规则,给出输入输出说明及样例。要求编写程序判断机器人能否走出网格并输出步数,博主试多组数据无误,但交OJ平台未得满分,希望有人帮忙找出问题。

C语言-机器人OJ题目

问题描述
机器人按照给定的指令在网格中移动,指令有以下四种:
N 向北(上)移动
S 向南(下)移动
E 向东(右)移动
W 向西(左)移动
如下图所示,在网格1中,机器人初始位于网格第1行第5列,按照网格中的指令,机器人在走出网格前需要10步。在网格2中,机器人初始位于网格第1行第1列,按照网格中的指令,机器人将进入一个循环,永远走不出网格,且在进入循环前走了11步。
在这里插入图片描述
假定机器人初始时刻总是在网格第一行的某一列上,请你写一个程序确定机器人能否走出网格,并输出走出网格或进入循环需要的步数。

输入说明
输入数据第一行为空格分隔的3个整数,分别表示网格行数N、列数M和初始时刻机器人所在的列C(从网格最左边开始,以1为基准计数)。每个网格的行数和列数均不超过20。接下来是N行指令,指令只包含N,S,E和W四种,所有指令之间没有空格。

输出说明
如果机器人可以走出网格,输出"out "加上走出网格需要的步数;如果机器人进入循环不能走出网格,输出"loop "以及进入循环前走的步数。

输入样例
3 6 5
NEESWE
WWWESS
SNWWWW

输出样例
out 10

备注:个人试了很多组数据都没有问题,但交到OJ平台上都得不了满分。发这篇博文,除了提供一个思路外,也希望有巨佬能看看哪里有问题。

#include<stdio.h>
int main()
{
	int n,m,start;
	scanf("%d%d%d",&n,&m,&start);
	getchar();//消除回车 
	char map[n][m];
	int i,j;
	for(i=0;i<n;i++)
	{
		for(j=0;j<m;j++)
			scanf("%c",&map[i][j]);
		getchar();//消除回车 
	}
		
	int b[n][m]={},count=0,row,col; //数列b用来标记是否走过这里。按理来说,{}中应该放个0,但不知道为什么我的一放就错 

	for(row=0,col=start-1;;)
	{
		count ++;
		b[row][col] ++;
		
		if(b[row][col]==2)	//如果b[row][col]==2,说明机器人走过这里,将要进入循环 
		{
			printf("loop %d",count-1);//进入循环的位置count计算了两次,所以要减一 
			break;
		} 
		
		if(map[row][col]=='N')		row --;
		else if(map[row][col]=='S')	row ++;
		else if(map[row][col]=='E')	col ++;
		else						col --;
		
		if(row<0 || row==n || col<0 || col==m)	//判断是否走出了地图 
		{
			printf("out %d",count);	
			break;
		}
		
	}
	
	return 0;
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值