实验任务
为了击败邪恶的组织—–图书馆破坏者,ytaaa 作为间谍加入这个组织。但是这并不是人人都可以加入的,作为考验,组织分配了一个任务作为考核,那就是,把图书馆内书的顺序打乱,而且必须是没有一本书在其原本的位置。现在 ytaaa 很好奇一共有多少种方式将所有书放错。
数据输入
输入一行包括一个正整数 N(N<=20),表示书本数量。
数据输出
输出仅有一个数,将所有书放错的方案数。
输入示例
3
输出示例
2
解题思路
直接套错排的递推公式就好了(:з」∠),详见全错位排列
不过要注意数据大小,要用__int64才行
参考代码
#include <stdio.h>
__int64 ans[25]={0,0,1}; //初值
int main()
{
int n,i;
for (i = 3;i <= 20;i++)
ans[i] = (i-1)*(ans[i-1]+ans[i-2]); //错排的递推公式
while (~scanf("%d",&n))
printf("%I64d\n",ans[n]);
return 0;
}