本题题意就是送了n封信,送n个不同的地方,然而全送错了地方,求此种情况可能出现的种数。
本题首先是一个全排列,现在我假如有1,2,3,4四封信,对应送1,2,3,4四个地方,而全排列,一号位可放4种数,每种有六种情况,排除1放一号位故i-1,而我只通过这点发现,简化了归纳列表的组建,最后利用题目中例子,与手算前7个,猜出公式。
#include<iostream>
using namespace std;
int main()
{
long long a[21]={0,0,1,2},n;
for(int i=4;i<=20;i++)
{
a[i]=(i-1)*(a[i-1]+a[i-2]);//关于a[i-1]+a[i-2]的情况我是用列表猜的,还没想通
}
while(cin>>n)
{
cout<<a[n]<<endl;
}
}