杭电4535

来源:互联网 发布:mac lamp 一键安装包 编辑:程序博客网 时间:2024/05/29 14:17

这道题目属于数学题,类型和拿信封问题一样,利用错排公式!

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;
}