許多機器人在平面上行走,判斷會不會掉下去平面,還有印出最後的座標及方向

[心得]

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;
}

創作者介紹
創作者 RingsACM 的頭像
RingsACM

Ring's ACM

RingsACM 發表在 痞客邦 留言(0) 人氣()