标准的错排,推倒过程参考:
http://blog.csdn.net/u010021900/article/details/8775523
/*HDOJ1465
作者:陈佳润
2013-04-08
*/
#include<iostream>
using namespace std;
int c(int n,int k){
int i,sum=1,kk;
kk=2;
for(i=1;i<=k;i++){
sum*=n;
n--;
while(sum%kk==0&&kk<=k){
sum/=kk;
kk++;
}
}
return sum;
}
int main()
{
int i,b;
__int64 num[21];
num[0]=1;
num[1]=0;num[2]=1;
for(i=2;i<=20;i++)
num[i]=(i-1)*(num[i-1]+num[i-2]);
while(cin>>b){
printf("%I64d\n",num[b]);
}
return 0;
}