错排详解:http://blog.csdn.net/jiahui524/article/details/6624977
.
.
.
hdu2068思路:http://hi.baidu.com/owen563/item/90f206307cbeb32ab2c0c5cd
.
.
.
组合公式 :http://wenku.baidu.com/view/dea457d126fff705cc170a83.html
#include<stdio.h>
#include<math.h>
__int64 C(int n,int m) //组合数公式
{
__int64 u,d,i; //组合数公式中的 分子u和分母d
if(m>n/2) m=n-m; //防止溢出?
for(u=d=i=1;i<=m;i++)
{
u=u*(n-i+1);
d=d*i;
}
return u/d;
}
main()
{
int i,M,N;
__int64 f[14]={1,0,1},sum;
for(i=3;i<=13;i++)
f[i]=(i-1)*(f[i-1]+f[i-2]);
while(scanf("%d",&N),N)
{
for(sum=i=0;i<=N/2;i++)
sum+=C(N,N-i)*f[i];
printf("%I64d\n",sum);
}
}