原题链接:点击此处
解题思路:
一道应该属于递推的题目。
就是N封信都装错信封了。。。
假设信封有7个吧:A~G
A
_ _ _ _ _ _ _
a
向A里装错有7-1种情况,先选一种放b
A
b _ _ _ _ _ _
开始放B的,B可以放a也可以放其他的,如果放a,则就是剩下n-2个的排列了,
如果放其他的假设放c那就是剩下n-1的排列
这样就可以总结出来规律:
f[n]= (n-1)*( f[n-1] + f[n-2])。
源代码:
#include <iostream> #include <stdio.h> using namespace std; long long a[21]={0,0,1,2}; int n; int main() { for(int i=3;i<=21;i++) a[i]=(i-1)*(a[i-1]+a[i-2]); while(cin>>n) cout<<a[n]<<endl; return 0; }
时间: 2024-10-17 20:58:05