[Offer收割]编程练习赛62:方向

本文介绍了一种计算从一个方向转到另一个方向所需最小角度的方法。通过实例演示了如何求解不同角度之间的最短路径,并提供了完整的C++代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


时间限制:20000ms
单点时限:1000ms
内存限制:256MB

描述

我们可以用 0..359 之间的角度来描述一个方向,现在给出两个方向 a , b,你需要求出,从 a 转到 b 最少需要的角度。

例如,从 70° 转到 180°,可以转 110°,也可以转 -250°

又比如,从315°转到45°,可以转90°,也可以转 -270°

定义一个角度 a 比另一个角度 b 小,当且仅当 a 的绝对值小于 b。

例如:180°比 -220°小,-45°比80°小。

特别的,如果两个角度的绝对值相同,我们规定正的角度比较小,比如180°小于-180°

输入

第一行两个 0 到 359之间的整数 a , b

输出

输出最少需要转的角度

额外的样例

样例输入1样例输出1
180 270
90
样例输入2样例输出2
45 270
-135
样例输入
315 45
样例输出
90


#include<iostream>
#include<algorithm>
using namespace std;
int main() {
	ios::sync_with_stdio(false); cin.tie(0);
	int a, b,num1,num2;
	cin >> a >> b;
	if (a < b)
	{
		 num1 = b - a;
		 num2 = (b - a - 360);
	}
	if (a > b) {
		num1 = 360 - a + b;
		num2 = b - a;
	}
	if (abs(num1) > abs(num2))
		cout << num2<<endl;
	else if (abs(num1) == abs(num2))
		cout << abs(num1)<<endl;
	else
		cout << num1<<endl;
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值