杭电oj----1035 Robot Motion

题目大意:第一行输入三个数i,j,n,分别代表输入有i行j列,机器人站在n列,依照N(向上走一个单位)E(向右走一个单位)S(向下走一个单位)W(向左走一个单位)。

输出:输出有两种可能:1.走出这个矩阵,则输出走出的步数   2.未走出,那么一直都在矩阵中循环走,求走到开始循环的步数以及循环一次的步数。

解题思路:定义一个char类型的二维数组,因为输入的矩阵没有空格,所有可以用一个for循环完成输入,将机器人所在之处放在数组中,如果遇到N,E,S,W,标记一下,执行下一步,同时累积步数。如果走出矩阵,就输出;如果又回到标记之处,就完成了一次循环,输出

#include <iostream>
using namespace std;
int main()
{
    int i,j,n,k,a,b,s,m;
    bool flag;
    char x[11][11];
    while (cin>>i>>j>>n && (i!=0||j!=0))
    {
        s=0;flag=false;
        for (k = 0; k < i; k++)
        {
            cin>>x[k];
        }
        a=0;b=n-1;
        while (a>=0&&b>=0&&a<i&&b<j)
        {
            switch (x[a][b])
            {
            case 'N':x[a][b]=s++;a--;break;//原来整型也可以赋值个char二维数组
            case 'S':x[a][b]=s++;a++;break;
            case 'E':x[a][b]=s++;b++;break;
            case 'W':x[a][b]=s++;b--;break;
            default:
                s=s-x[a][b];flag=true;m=x[a][b];
                break;
            }
            if(flag) break;
        }
        if (flag)
        {
            cout<<m<<" step(s) before a loop of "<<s<<" step(s)"<<endl;
        }
        else
        {
            cout<<s<<" step(s) to exit"<<endl;
        }
    }
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值