HDOJ 1465 不容易系列之一

 

// HDOJ 1465 不容易系列之一
// @author:	bos
// @date:	2012.2.9
//错排问题
#include <stdio.h>
#include <memory.h>
int main()
{
	int n;
	_int64 f[21]= {0};				//注意这里用到C++的扩展类型_int64,表示范围更大,关于它
	while(scanf("%d", &n)!= EOF)	//跟long或者long long的区别是请看下面的知识点。
	{
		memset(f, 0, sizeof(f));
		int i;
		f[2]= 1;
		
		for (i= 3; i< 21; i++)			//需从3开始
		{
			f[i]= (i- 1)*( f[i-1]+ f[i-2]);	//错排公式
		}
		printf("%I64d\n", f[n]);

	}
	return 0;
}
// 知识点1:
// _int64是微软VC中对C++的扩展类型,格式控制符是%I64d,无符号是%I64u。
// long long是G++编译器支持的64位数类型,格式控制符是%lld,无符号是%llu。
//在OJ中,如果使用C++,你使用_int64或者long long都行,但是格式控制符必须是%I64d
//知识点2:
//关于错排公式,网上有很多教程的,搜几篇看看吧,我这里就不罗列了,很好理解的。
posted @ 2012-02-09 04:20  ibos  阅读(286)  评论(0编辑  收藏  举报