题目:有6个箱子A-F,每个箱子里有一把钥匙,拿到钥匙i就能打开箱子i。现在我们强行打开1,2箱子,取出里面的钥匙,然后用这些钥匙打开其他箱子……最后问有几种可能打开所有箱子。(小学题
解法:我们用f[i]表示可以打开i个箱子的放置数,首先推首项f[2]=2,因为1,2和2,1都是一样可以打开的,我们从n开始考虑第n个箱子的钥匙一定不能放在它自己的身上,因为这样必定无解,那么它就一定放置在1,2...n-1个箱子之中,我们把第n个箱子所放的钥匙和位于其他箱子之中有n的钥匙的箱子互换一下,然后把n号箱子删除,那么方案数就是f[n]=f[n-1](n-1);
所以方程就是f[i]=f[i-1]
(i-1);

#include <stdio.h>
int main()
{
    int f[7];f[2]=2;
    int i=2,n=6; while(i++!=n) f[i]=f[i-1]*(i-1);
    printf("%d\n",f[6]);
    return 0;
}