P1595 信封问题
思路分析
定义一个一维数组 f[ ] ,下标表示信封数,存放情况数;根据递推公式 f(n) = (n-1)*(f(n-1) + f(n-2)) 即可得出本题答案;
注意事项
由题可知:信封数 n <= 20;所以需要定义数组为 long long 类型;输出格式应该用 %lld,防止输出负数;
代码实现
#include <stdio.h>
int main(){
int n
, i
;
long long f
[20];
scanf("%d", &n
);
f
[1] = 0;
f
[2] = 1;
for(i
= 3; i
<= n
; i
++)
f
[i
] = (i
-1)*(f
[i
-1] + f
[i
-2]);
printf("%lld", f
[n
]);
return 0;
}