zjut1684AirCraft

http://acm.zjut.edu.cn/ShowProblem.aspx?ShowID=1684

AirCraft 
Time Limit:1000MS  Memory Limit:32768K
Description:

LCS has an aircraft, he can use some specific commands to make his aircraft to move. To simple the problem, you can assume the aircraft just move on the 2D-Plane.

There are four commands :fd x, bk x, lt y, rt y.
The command fd causes the aircraft to move forward by the specified number x of meters.
The command bk causes the aircraft to move backward by the specified number x of meters.
The command lt causes the aircraft to turn left by the specified number y of degrees.
The command rt causes the aircraft to turn right by the specified number y of degrees.

After executing many commands, LCS's aircraft maybe far away from it's start position. Your task is to calculate the straight-line distance from the LCS's aircraft present position to the position it started from.
Input:

The first line of input contains one integer specifying the number of test cases to follow. Each test case starts with a line containing one integer, the number of commands to follow. The commands follow, one on each line. Each test case will contain no more than 1000 commands.
Output:

For each test case, output a line containing a single integer indicating the distance rounded to the nearest meter.
Sample Input:

1
5
fd 100
lt 120
fd 100
lt 120
fd 100
Sample Output:

0

#include<iostream>
#include<string>
#include<cmath>
using namespace std;
const double pi=3.141592653589;
double x,y;
double dir;
void move(string s,double m)
{
	if(s=="fd")
	{
          y+=sin(dir)*m;
		  x+=cos(dir)*m;
		  return ;
	}
	if(s=="bk")
	{
          y-=sin(dir)*m;
		  x-=cos(dir)*m;
		  return;
	}
	if(s=="lt")
	{
          dir+=m/360*pi*2;return;
	}
	if(s=="rt")
	{
          dir-=m/360*pi*2;return;
	}
}
double dis(double i,double j)
{
     return pow(i*i+j*j,0.5);
}
int main()
{
	int cas,n;
	double b;
	string op;
	cin>>cas;
	while(cas--)
	{
		cin>>n;
		x=0,y=0,dir=pi/2;
		for(int i=0;i<n;i++)
		{
             cin>>op>>b;
			 move(op,b);
		}
        cout<<(int)(dis(x,y)+0.5)<<endl;

	}

}
原文地址:https://www.cnblogs.com/sook/p/2040223.html