题解 | #坐标移动#

坐标移动

http://www.nowcoder.com/practice/119bcca3befb405fbe58abe9c532eb29

include

include

include

using namespace std;

/*算法思想:
利用状态机制:
W10;分别对应
1234个个状态,而5代表输入错误,可能是AA10或A或Q等非规则步骤
用direction标记wsad方向,
每遇到一个';'就将上个‘步’更新到坐标
*/

int main()
{
char ch;
int state = 4;
int x = 0, y = 0; //初始坐标
int step = 0;
int direction = 0;
while (cin.get(ch))
{
switch (ch)
{
case 'W':
if (state == 4)
{
state = 1;
direction = 1;
}
else
state = 5;
break;
case 'S':
if (state == 4)
{
state = 1;
direction = 2;
}
else
state = 5;
break;
case 'A':
if (state == 4)
{
state = 1;
direction = 3;
}
else
state = 5;
break;
case 'D':
if (state == 4)
{
state = 1;
direction = 4;
}
else
state = 5;
break;
case ';':
if (state == 2 || state == 3)
{
switch (direction)
{
case 1: y += step; step = 0; break;
case 2: y -= step; step = 0; break;
case 3: x -= step; step = 0; break;
case 4: x += step; step = 0; break;
default:;
}
}
state = 4;
break;
default:
if (ch >= '0' && ch <= '9')
{
if (state == 1)
{
state = 2;
step = ch - '0';
}
else if (state == 2)
{
state = 3;
step = step * 10 + ch - '0';
}
}
else
state = 5;
}
}
if (state == 2 || state == 3)
{
switch (direction)
{
case 1: y += step; step = 0; break;
case 2: y -= step; step = 0; break;
case 3: x -= step; step = 0; break;
case 4: x += step; step = 0; break;
default:;
}
}
cout << x << ',' << y;
return 0;
}

全部评论

相关推荐

Allen好Iverson:我看牛客都是20-30k的 这个3.9k爆出来有点,哈哈哈哈
点赞 评论 收藏
分享
2024-12-31 11:16
已编辑
北京邮电大学 Java
KalznAsawind:标准的八股问烂简历,面试官碰到这种简历一般都会开始轰炸八股了。其实我一直觉得项目、实习的作用是将面试官困在你的语境中,在你的语境中跟他解释项目背景和细节,跟他battle,减少他轰炸你八股的时间,这样压力会小很多。但是你的项目是一眼无落地、无背景的包装项目,所以对方也不会去在意你的项目背景,只会针对你的项目涉及的技术栈开始轰炸八股,会增大你的压力,而你面试过不过全看你八股背的熟不熟。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务