寒假训练 B先生与多边形的角度

输出量

标准输出

在一天安静的日子,B先生突然决定画个角度a在他的球场上。外星人已经访问了他的领域,并留下了许多不同的几何图形。其中一个数字是正则凸n-贡(具有正则凸多边形n)。

这就是为什么B先生决定使用这个多边形。现在B先生必须找到三个不同的顶点v1, v2, v3这样的角度(在哪里v2是角的顶点,并且v1和v3躺在一边)尽可能靠近a。换句话说,价值应该是最小的可能。

如果有许多最优解,B先生应该对其中的任何一种都满意。

输入

第一行和唯一一行包含两个空格分隔的整数。na (3≤n≤105, 1≤a≤180)-多边形中的顶点数和所需的角度,以度数为单位。

输出量

打印三个空格分隔的整数:顶点v1, v2, v3,哪种形式。如果有多个最优解,请打印其中任何一个。顶点是从1到n按顺时针顺序排列。

实例

输入

复制

3 15

输出量

复制

1 2 3

输入

复制

4 67

输出量

复制

2 1 3

输入

复制

4 68

输出量

复制

4 1 2

在第一次样本测试中,正三角顶点只能生成60度,这就是为什么每个可能的角度都是正确的。

正方形顶点45或90只有度角。这就是为什么在第二次样本测试中45学位被选中,因为\x{e76f}\x{e76f}\x{e76f}45-67。其他正确答案如下:“3 1 2”、“3 2 4”、“4 2 3”、“4 3 1”、“1 3 4”、“1 4 2”、“2 4 1”、“4 1 3”、“3 1 4”、“3 4 2”、“2 4 3”、“2 3 1”、“1 3 2”、“1 2 4”、“4 2 1”。

在第三次样本检验中,相反的是,90学位被选中,因为\x{e76f}90-68\x{e76f}\x{e76f}。其他正确答案如下:“2 1 4”、“3 2 1”、“1 2 3”、“4 3 2”、“2 3 4”、“1 4 3”、“3 4 1”。

 

分析:此题难点在于多边形的的角度计算,以六边形为例,其角度依次为180/6*1,180/6*2,180/6*3,180/6*4,只有(n-2)个角。

#include <bits/stdc++.h> 
using namespace std;
int main(){	
	double n;
	int a,v1,v2,v3;
	v2 = 1;
	while(cin >> n >> a){
	int flag;
	double min = 180;
	double num1 = 180*1.00/n;
	for(int i = 3; i <= n; i++){
		double num2 = (i-2) * num1;
		double min1 = fabs(num2 - a);
		if(min > min1){
			min = min1;
			flag = i;
		}
	}
	cout << 2 << " 1" << " " << flag << endl; 
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值