萌萌哒身高差

萌萌哒身高差






何老师认为,同学们站成一排时,相邻两个同学身高相差越多,这两个同学站在一起越萌。


那么所有相邻两个同学的身高差加起来越大,拍出来的照片就越萌,也就是这张照片的萌力指数。


何老师希望拍出来的照片的萌力指数尽可能大。
然而何老师并不是数学老师,而是语文老师。
何老师觉得很GG。
何老师只想知道,如果让同学们随便站成一排(站成所有排列的可能性都相等),萌力指数的数学期望是多少。


聪明的我一下子就算出了答案,然后何老师就奖励了我一个很萌的礼物。
今天真的好开心。




BNU ACM队共有n名同学,身高分别是,聪明的你能计算出何老师想要的数学期望吗?


输入描述:
第一个是一个正整数T(T ≤ 20),表示测试数据的组数,
每组测试数据只有一行,包含一个整数n(2 ≤ n ≤ 100)。


输出描述:


对于每组测试数据,输出一行,包含一个实数,表示萌力指数的数学期望值,要求相对误差不超过,


也就是说,令输出结果为a,
标准答案为b,若满足,则输出结果会被认为是正确答案。






输入




2
2
3


输出




1.000000000000


2.666666666667


说明
对于第二组样例,
所有可能的排列是[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1],所以答案是


题解:等效原理,对于(n-1)个相邻情况,都是等效的,而每两个相邻的数的特解,有(n-2)!种情况
又,相邻的两个数有n*(n-1)种特解,假设两个数的n*(n-1)种特解和为sum,则每种特解对应的和为
sum*(n-2)!,又两两等效,所以总和为sum*(n-2)!*(n-1),则答案为sum*(n-2)!*(n-1)/n!=sum/n.


#include
#include
#include
using namespace std;
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        int n;
        cin>>n;
        double sum=0;
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
            if(i!=j)
            sum+=abs(i-j);
         printf("%.12lf\n",sum/(1.0*n));
    }
    return 0;
}

你可能感兴趣的:(萌萌哒身高差)