H 巴蜀之危
已知n封书信,每封书信都投错了烽火台,居然没有一封是对的,求有多少种情况。
这是一个全错位排列,想了好久没有想出来来做法,但是能很明显感觉出这个问题是个数学问题,一百度就出来一个 错排公式,直接就可以解了,
公式为 D(n) = (n-1) [D(n-2) + D(n-1)];
代码如下:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,i,j;
long long int f[21];
f[1]=0;
f[2]=1;
f[3]=2;
for(i=4;i<21;i++)
f[i]=(i-1)*(f[i-1]+f[i-2]);
while(cin>>n)
cout<<f[n]<<endl;
return 0;
}