题目链接
写在前面
比赛时思路对了,代码挂了(
我真是个人才。
题意
给定 n(n∈{2k+1∣k∈N∗}),求能包括正 2n 边形的正方形的最小边长。
思路
先求出这个多边形的直径,为 sin2n180∘1。
然后我们看看两个例子。
正六边形
容易看出,∠OAX=∠AYO+∠AOY=45∘+30∘=75∘。
∠AOY 是怎么得出的呢,它是 26360∘,即 2n180∘。
正方形边长即为 DH=AD⋅sin∠OAX。
正十边形
同理:
∠OAX∠AOYFH=∠AYO+∠AOY=45∘+36∘=81∘=22⋅10360∘=2n2⋅180∘=AF⋅sin∠OAX
正 2n 边形
它的最小包括正方形的边长为:
sin2n180∘1⋅sin(2n⌊2n⌋⋅180∘+45∘)
实现
C++ cmath
库中的三角函数是弧度制的,所以答案为 sin2nπsin(2n⌊2n⌋⋅π+4π)。
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| #include<cstdio> #include<cmath> using namespace std; const double pi=acos(-1); int t,n; int main() { scanf("%d",&t); while(t--) { scanf("%d",&n); printf("%.8lf\n",sin(pi*(n/2)/n/2+pi/4)/sin(pi/n/2)); } return 0; }
|