poj 2249Binomial Showdown

簡單排列組合題,輸入n,m求n中選m個數的種類

 

#include<stdio.h>
__int64 work(__int64 n,__int64 k)
{//求在n個數中選m個數的組合數.
	__int64 i,sum,j = 1;
	if(k > n)
		return 0;
	//求組合數
	for(sum = 1,i = k; i ; i--)
	{
		sum *= n--;
		while(sum%j == 0 && j <= k)
			sum /= j++;
	}
	return sum;
}
int main()
{
	__int64 n,m;
	while(scanf("%I64d%I64d",&n,&m) != EOF&& n+m)
	{
		if((m<<2) > n)
			m = n-m;
		printf("%I64d\n",work(n,m));
	}
	return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章