HDU 1472(There's Treasure Everywhere!)

模拟题,按要求模拟即可,详细见注释。

#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;
}

继续加油。

发布了325 篇原创文章 · 获赞 1 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/Intelligence1028/article/details/105485807
今日推荐