这是一道错排题
错排公式:D(M)=(M-1)*(D[M-1+D[M-2])
思路
用错排除以总的可能数
代码
#include
#include
int main()
{
int n,i;
int a;
scanf("%d",&n);
while(n--)
{
long long int d[24]={0,0,1,2},c=2;
scanf("%d",&a);
for(i=3;i<=a;i++)
{
d[i]=(i-1)*(d[i-1]+d[i-2]);//错排
c=c*i;//总的可能数
}
printf("%.2f%%\n",d[a]*100.0/c);
}
return 0;
}
注意事项
若有更好的解法,或者更简洁的解法,还请大佬多多指教。