这道题目属于数学题,类型和拿信封问题一样,利用错排公式!
f(n)=(n-1)*(f(n-1)+f(n-2));
代码:
#include<iostream>
using namespace std;
const __int64 maxn=1000000000+7;
int main()
{
int t;
int n,i;
__int64 a[100];
a[1]=0;a[2]=1;
for(i=3;i<=100;i++)
{
a[i]=((i-1)*a[i-1]%maxn+(i-1)*a[i-2]%maxn)%maxn;
}
while(cin>>t)
{
while(t--)
{
cin>>n;
cout<<a[n]<<endl;
}
}
return 0;
}