武汉理工新生赛A: 模拟 转向次数

登录—专业IT笔试面试备考平台_牛客网

转向的次数由因素决定:

1.初始点具有方向,但不算一次转向

2.前一次 与 本次的方向 不一致算一次转向

题目要求:

1.每个位置的导向板只会使用一次,使用一次后需要 消失 此位置的导向板

2.没有导向板的位置,前进时 和 前一次的方向一致

注意:

1.记录前一次的方向

2.离开边界 的时候结束模拟

3.代码顺序:先记录 此点走过, 再 前进(变化人的坐标)


const int N=110;
char a[N][N];
int main()
{
    int n,m,x,y;
    cin>>n>>m>>x>>y;
    int xx=x,yy=y;
    for( int i=1;i<=n;i++ )
        for( int j=1;j<=m;j++ )
            cin>>a[i][j];
    
    int ans=0,f=0;;
    while( 1 )
    {
        if( x<1 || x>n || y<1 || y>m )  break;
        if( a[x][y]=='U')  {
            if(  (x!=xx || y!=yy) &&f!=1) ans++;
            a[x][y]='G';//先
            x=x-1;//后
            f=1;
        }
        else if( a[x][y]=='D') {
            if( (x!=xx || y!=yy) &&f!=2) ans++;
            a[x][y]='G';
            x=x+1;
            f=2;
            
        }
        else if( a[x][y]=='L' ) {
            if( (x!=xx || y!=yy) &&f!=3) ans++;
            a[x][y]='G';
            y=y-1;
            f=3;
    
        }
        else if(a[x][y]=='R') {
            if( (x!=xx || y!=yy) && f!=4) ans++;
            a[x][y]='G';
            y=y+1;
            f=4;
           
        }
        else if( a[x][y]=='G')
        {
            if( f==1 )  x=x-1;
            else if( f==2) x=x+1;
                else if( f==3) y = y-1;
                    else if( f==4)  y = y+1;
        }
        
    }
    cout<<ans;
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值