J - Jumbled Compass (旋转问题)

Jonas is developing the JUxtaPhone and is tasked with animating the compass needle. The API is sim- ple: the compass needle is currently in some direc- tion (between 0 and 359 degrees, with north being 0, east being 90), and is being animated by giving the degrees to spin it. If the needle is pointing north, and you give the compass an input of 90, it will spin clockwise (positive numbers mean clockwise direction) to stop at east, whereas an input of −45 would spin it counterclockwise to stop at north west. cc-by NCPC 2016 The compass gives the current direction the phone is pointing and Jonas’ task is to animate the needle taking the shortest path from the current needle direction to the correct direction. Many ifs, moduli, and even an arctan later, he is still not convinced his minimumDistance function is correct; he calls you on the phone.

Input

There will be several test cases. For the each case, The first line of input contains an integer $ n_1 (0 ≤ n_1 ≤ 359) $ , the current direction of the needle. The second line of input contains an integer $ n_2 (0 ≤ n_2 ≤ 359) $, the correct direction of the needle.

Output

Output the change in direction that would make the needle spin the shortest distance from n1 to n2. A positive change indicates spinning the needle clockwise, and a negative change indicates spinning the needle counter-clockwise. If the two input numbers are diametrically opposed, the needle should travel clockwise. I.e., in this case, output 180 rather than −180.

Sample Input

315 
45

180 
270

45 
270

Sample Output

90
90
-135

【解析】

题意:给你开始角度n1,目标角度n2,(0<=n1,n2<=360)问最少转多少度能使,n1到n2。顺时针则+,逆时针则-。

#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
	int n, m, c;
	while (~scanf("%d%d",&n,&m)) 
	{
		c = m - n;
		if (c<0) c += 360;
		else c = c % 360;
		if (c <= 360 - c) 
			printf("%d\n", c);
		else 
			printf("%d\n", c - 360);
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/waterboy_cj/article/details/81541375
今日推荐