链接:https://ac.nowcoder.com/acm/contest/992/F
来源:牛客网
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
题目描述
某年某月某日,琪仔get到了一款十分精美的天花板图案的设计图纸。
图案的框架最初是一个正n边形,之后以它的n条边的中点为顶点构成一个新的正n变形。如此重复多次后,就能得到天花板图案的框架了。
不要问重复多少次,问就是无限重复。。。
给定n,求生成的图案的框架所有边的长度总和(最初正n边形每条边的边长均为100)。
输入描述:
多组测试(不多于100组),每组一行一个整数n( 2 < n <= 100),表示正多边形的边数。
输出描述:
对于每组测试,输出一行一个结果,四舍五入保留两位小数。(请用较为简洁的计算方式,以减少误差)
示例1
输入
复制
3
4
50
输出
复制
600.00
1365.69
2533863.09
我们只需要用当前边数得知角度算出下一条边的长度就可以了。ans=n*a;a是当前边长度,n是当前n边形。
n边形有性质:外角之和=360°,那么一个外角角=度,一个内角:b=180°-外角。
直接上草稿纸画图
/*¼ò»¯°æ*/
#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=(b);++i)
#define mem(a,x) memset(a,x,sizeof(a))
#define pb push_back
using namespace std;
const double expx=1e-12;
const double pi=acos(-1);
typedef long long ll;
int main(){
int n;
while(~scanf("%d",&n)){
double a=100.0;
double ans=0;
double b=(pi-(pi*2)/n)/2;
while(a>expx){
ans+=a*n;
a=a*sin(b);
}
printf("%.2f\n",ans);
}
}