許多機器人在平面上行走,判斷會不會掉下去平面,還有印出最後的座標及方向
[心得]
1.參考板上,可以用 x+=dx[dir] 表示行走的方向 (ESWN:dir=0~3)
2.如果機器人掉下去,之後的步驟都不用再做,所以要找對位置 break
3.一開始看錯題目,讀步驟並不是讀到EOF停,要用長度來控制
4.用 gets() 讀整句時,如果上面使用的是 scanf(),要記得在裡面加 "\n" 讀到底
5.忘了基本的 switch,如果 case 是 int,直接 case 數字: 就好不用加""
#include <stdio.h>
#include <string.h>
int main()
{
int m,n,x,y,x0,y0,dir,scent,len,i;
int dx[4]={1,0,-1,0},dy[4]={0,-1,0,1},map[51][51]={0};
char to,step[101];
scanf("%d %d",&m,&n);
while(scanf("%d %d %c\n",&x,&y,&to)!=EOF)
{
switch(to)
{
case 'E': { dir=0; break; }
case 'S': { dir=1; break; }
case 'W': { dir=2; break; }
case 'N': { dir=3; break; }
}
scent=0;
gets(step);
len=strlen(step);
for(i=0;i<len;i++)
{
if(scent) break;
switch(step[i])
{
case 'L': { dir=(dir+3)%4; break; }
case 'R': { dir=(dir+1)%4; break; }
case 'F':
{
x0=x; y0=y;
x=x+dx[dir]; y=y+dy[dir];
if((x>m)||(y>n)||(x<0)||(y<0))
{
if(!map[x0][y0])
{
scent=1;
map[x0][y0]=1;
}
x=x0; y=y0;
}
}
} /* end of switch */
} /* end of for */
switch(dir)
{
case 0: { to='E'; break; }
case 1: { to='S'; break; }
case 2: { to='W'; break; }
case 3: { to='N'; break; }
}
printf("%d %d %c",x,y,to);
if(scent)
printf(" LOST");
printf("\n");
}
return 0;
}