题目大意:第一行输入三个数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;
}