题目描述
“动感超人520”可以按照你输入的命令进行移动,命令包括‘E’、‘S’、‘W’、‘N’四种,分别对应东南西北四个方向。执行某个命令时,它会向对应的方向移动一格。作为新款机器人模型,“动感超人520”可以执行一行命令串。对于所输入的命令串,每一秒“动感超人520”会按命令的方向行动一次。当执行完指定命令串的最后一个命令之后,他会自动从头开始循环。假如在0时刻时,“动感超人520”位于坐标(0,0)。求在T秒时“动感超人520”所在位置坐标。
https://www.luogu.org/problemnew/show/T30768#sub
这个题很简单,就是个模拟嘛;我想说的都在代码里:
#include <cstdio>
#include <cstring>
char a[5009];
int main()
{
// freopen("robot.in","r",stdin);//呵呵,这里可以不要
// freopen("robot.out","w",stdout);
int t;
scanf("%s",a);
scanf("%d",&t);
int x=0;
int y=0;
int s1=0;
int s2=0;
int len=strlen(a);
int hh;
hh=len-1;
for(int i=0;i<=hh;i++)
{
if(a[i]=='E')//向东
{
x++;//x坐标加1
}
if(a[i]=='S')//向南
{
y--;//x坐标减1
}
if(a[i]=='W')//向西
{
x--;//x坐标减1
}
if(a[i]=='N')//向北
{
y++;//y坐标加1
}
}
if(t>len)//对于要重复执行命令的数据处理“当执行完指定命令串的最后一个命令之后,他会自动从头开始循环”
‘ {
int count;
count=t/len;//这里先拿t除len,最后mod掉的给sheng
for(int i=1;i<=count;i++)
{
s1=s1+x;
s2=s2+y;
}//应为每次执行都会加x合加y,所以s1与s2都是计算count后坐标
int sheng;
sheng=t-len*count;//处理最后剩余
for(int i=0;i<=sheng-1;i++)//与前面相同
{
if(a[i]=='E')
{
s1++;
}
if(a[i]=='S')
{
s2--;
}
if(a[i]=='W')
{
s1--;
}
if(a[i]=='N')
{
s2++;
}
}
}
printf("%d %d",s1,s2);
return 0;
}
很简单的模拟。。。