思路:
特判1,2
之后从n个数字中, 奇数注意算一半时候+1,
选择一半~0的数字是放错位置的,并且将其错排
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
unsigned long long f[205];
int main()
{
f[1]=0;
f[2]=1;
for(int i=3;i<=25;i++)
f[i]=(i-1)*(f[i-1]+f[i-2]);
unsigned long long n,m;
while(cin>>n)
{
if(n==0) break;
if(n==1||n==2)
{
cout<<1<<endl;
continue;
}
m=n-(n+1)/2;
unsigned long long ans=1;
for(int k=2;k<=m;k++)
{
unsigned long long res=1;
for(int i=n;i>=n-k+1;i--)
res*=i;
for(int i=k;i>=1;i--)
res/=i;
res*=f[k];
ans+=res;
}
cout<<ans <<endl;
}
}