//错排思想:令a[n] 表示 n 个编号都不对应自己的位置有a[n]种方法;
//假设编号n放在编号k的位置上,有n-1种方法,若编号k放在n的位置上
//则有a[n-1]种,若不放在n的位置 则有a[n-1]种,因为把n的位置看成是
//k的位置 就好理解啦
#include<stdio.h>
int main()
{
__int64 a[25];
a[1] = 0;
a[2] = 1;
for(int i = 3; i <= 20; i++)
{
a[i] = (i-1)*(a[i-1]+a[i-2]);
}
int t, n;
scanf("%d", &t);
while(t--)
{
scanf("%d", &n);
__int64 sum = 1;
for(int i = 1; i <= n; i++)
{
sum *= i;
}
double m = a[n]*100.0/(sum*1.0);
printf("%.2lf%%\n", m);
}
}
hdu2048
最新推荐文章于 2021-06-01 22:38:13 发布