http://acm.hdu.edu.cn/showproblem.php?pid=2048 解题思路:再明显不过的错排问题了,套用错排递推公式就是了。 #include <stdio.h> int main() { __int64 sum[21]={0,1}; __int64 f[21]={0,0,1}; double res; int i,n,NumOfTest; char ch='%'; for (i=2;i<=20;i++) { sum[i]=sum[i-1]*i; if(i>=3) f[i]=(i-1)*(f[i-1]+f[i-2]); } while (scanf("%d",&NumOfTest)!=EOF) { while (NumOfTest--) { scanf("%d",&n); res=f[n]*1.0/sum[n]; res*=100; printf("%.2lf%c/n",res,ch); } } return 0; }