链接:https://ac.nowcoder.com/acm/contest/992/F
来源:牛客网
 

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld

题目描述

某年某月某日,琪仔get到了一款十分精美的天花板图案的设计图纸。

图案的框架最初是一个正n边形,之后以它的n条边的中点为顶点构成一个新的正n变形。如此重复多次后,就能得到天花板图案的框架了。

不要问重复多少次,问就是无限重复。。。

吉首大学2019年程序设计竞赛(重现赛) 天花乱坠(推公式)_#include

给定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°,那么一个外角角=吉首大学2019年程序设计竞赛(重现赛) 天花乱坠(推公式)_#include_02度,一个内角:b=180°-外角。

直接上草稿纸画图

吉首大学2019年程序设计竞赛(重现赛) 天花乱坠(推公式)_c++_03

/*¼ò»¯°æ*/
#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);
    }
}