题目链接:https://codeforces.com/contest/1354
思路:
先上图:因为n是偶数,由几何知识可以判断出来,
A
1
A_1
A1 =
A
2
A_2
A2,这两个小角正好平分大角。
由题意可以知道,要使外接正方形最小,那么正方形的边长就是图中最中心的那条横线,即2*tan(A2),然后题就好解了。
n边形内角和公式:内角和 = 180° * (n-2)
因为是2n边形
那么
A
2
A_2
A2 =
(
n
−
1
n
)
π
(\frac{n-1}{n})\pi
(nn−1)π
所以边长 = 2 *
1
2
\frac{1}{2}
21tan(
A
2
A_2
A2) = tan(
A
2
A_2
A2)
没想到这玩意还要推几何题,初中高中知识都忘记了。。。。
代码
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<string>
#include<cstring>
#include<iomanip>
#include<cmath>
using namespace std;
#define ll long long ;
const double pi = 3.1415926535;
int main() {
int t;
double n;
cin >> t;
while (t--)
{
cin >> n;
double a = pi * (n - 1.0) / n / 2.0;
cout << fixed << setprecision(7) << tan(a) << endl;
}
return 0;
}