http://acm.hdu.edu.cn/showproblem.php?pid=2048
这是一道错排的变式,其实用错排(n!*(1/2!-1/3!+…..+(-1)^n/n!) )/全排(n!) 即是我们要求的百分率,如果要简单一点就可以直接用(1/2!-1/3!+…..+(-1)^n/n!),所以我们就可以很容易写出,还有精度问题,四舍五入,由于系统本身就是取的四舍五入,所以我们就可以不做处理了
代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
double a[21];
double cm(int n)
{
double s=1;
for(double i=2;i<=n;++i)
{
s*=i;
}
return s;
}
int main()
{
int m,k;
a[1]=0;
for(int i=2;i<=20;++i)
{
if(i%2)
a[i]=a[i-1]-1/cm(i);
else
a[i]=a[i-1]+1/cm(i);
}
scanf("%d",&m);
while(m--)
{
scanf("%d",&k);
printf("%.2lf%%\n",a[k]*100);
}
// system("pause");
return 0;
}