模拟题,按要求模拟即可,详细见注释。
#include <iostream>
#include <string>
#include <cctype>
#include <iomanip>
using namespace std;
const double sTwo = 1.0 / sqrt(2.0); //斜向前进一步,在X轴和Y轴上移动的距离
//方向,N,NE,E,SE,S,SW,W,NW
double dir[8][2] = { {0,1},{sTwo,sTwo },{1,0},{sTwo,-sTwo},
{0,-1},{-sTwo,-sTwo},{-1,0},{-sTwo,sTwo} };
int main()
{
int Case = 1; //测试用例数
string s;
while (cin >> s)
{
if (s == "END")
break;
double x = 0, y = 0; //坐标
int num = 0; //方向前的数字
for (int i = 0; i < s.size(); i++)
{
if (isdigit(s[i])) //数字
num = num * 10 + s[i] - '0';
else if (s[i] == 'N')
{
if (s[i + 1] == 'E') //NE
{
x += num * dir[1][0];
y += num * dir[1][1];
++i;
}
else if (s[i + 1] == 'W') //NW
{
x += num * dir[7][0];
y += num * dir[7][1];
++i;
}
else //N
{
x += num * dir[0][0];
y += num * dir[0][1];
}
}
else if (s[i] == 'S')
{
if (s[i + 1] == 'E') //SE
{
x += num * dir[3][0];
y += num * dir[3][1];
++i;
}
else if (s[i + 1] == 'W') //SW
{
x += num * dir[5][0];
y += num * dir[5][1];
++i;
}
else //S
{
x += num * dir[4][0];
y += num * dir[4][1];
}
}
else if (s[i] == 'E') //E
{
x += num * dir[2][0];
y += num * dir[2][1];
}
else if (s[i] == 'W') //W
{
x += num * dir[6][0];
y += num * dir[6][1];
}
else if (s[i] == ',') //逗号
{
num = 0;
}
else if (s[i] == '.') //句号
{
double dis = sqrt(x * x + y * y); //距离
cout << "Map #" << Case++ << endl;
cout << "The treasure is located at (" << fixed << setprecision(3) << x << "," << y << ")." << endl;
cout << "The distance to the treasure is " << fixed << setprecision(3) << dis << "." << endl << endl;
}
}
}
return 0;
}
继续加油。