Problem Description
在半径为 1 的圆上有 n 个点,它们也是圆的 n 等分点,将每个相邻的 n 等分点相连,组成了一个正 n边形,现在你可以在圆上再增加一个点,使得新的 n + 1 边形的面积最大,请输出最大面积。
Input
输入有多组(不超过 100 组)。
每组数据一行一个整数 n 代表点的数量。
3 ≤ n ≤ 100
Output
每组数据输出一行一个数表示加上一个点后的最大面积,结果保留6位小数。
Sample Input
3
Sample Output
1.732051
Source
思路
三角形的面积公式 S=1/2ab*sin(边a和边b的夹角)
具体思路 代码里有注释
代码
#include "stdio.h"
#include "math.h"
#include "string.h"
#define Pi acos(-1.0)//Π(180°) = 3.1415926…
int main()
{
int n;
double f;
while(~scanf("%d",&n))
{
double jiao=2*Pi/n;
// 2*pi为 360°即2Π,以圆心为顶角, 正n边形 分为n个 以r为腰的等腰三角形
// 2*Pi/n 是边长r和边长r(等腰三角形两个腰 )之间 的夹角
// 故三角形的面积为1/2*r*r*sin(2*Pi/n)
f = 1/2.0*sin(jiao)*(n-1) + 1/2.0*sin(jiao/2.0)*2;
// 圆上再增加一个点,以增加的点做三角形的高
// 底边就是等腰三角的底边 (底边的长度是固定的)
// 由三角形的面积公式 S=1/2*底*高 (底边长度已确定)
// 你就会发现高越长面积就越大, 把增加的点 和 圆心链接
// 高最大的情况就是 把一个 三角形 的 顶点 (2*Pi/n) 平分
printf("%.6lf\n",f);
}
}