POJ 2249 Binomial Showdown 求组合数

Binomial Showdown

Binomial Showdown

Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 21165   Accepted: 6491

Description

In how many ways can you choose k elements out of n elements, not taking order into account? 
Write a program to compute this number.

Input

The input will contain one or more test cases. 
Each test case consists of one line containing two integers n (n>=1) and k (0<=k<=n). 
Input is terminated by two zeroes for n and k.

Output

For each test case, print one line containing the required number. This number will always fit into an integer, i.e. it will be less than 231. 
Warning: Don't underestimate the problem. The result will fit into an integer - but if all intermediate results arising during the computation will also fit into an integer depends on your algorithm. The test cases will go to the limit. 

Sample Input

4 2
10 5
49 6
0 0

Sample Output

6
252
13983816

Source

Ulm Local 1997

   
     

Description

In how many ways can you choose k elements out of n elements, not taking order into account? 
Write a program to compute this number.

Input

The input will contain one or more test cases. 
Each test case consists of one line containing two integers n (n>=1) and k (0<=k<=n). 
Input is terminated by two zeroes for n and k.

Output

For each test case, print one line containing the required number. This number will always fit into an integer, i.e. it will be less than 231. 
Warning: Don't underestimate the problem. The result will fit into an integer - but if all intermediate results arising during the computation will also fit into an integer depends on your algorithm. The test cases will go to the limit. 

Sample Input

4 2
10 5
49 6
0 0

Sample Output

6
252
13983816

Source

Ulm Local 1997

模板题,求组合数汇总(点这里

#include<cstdio>  
#include<cstring>  
#include<cstdlib>  
#include<cctype>  
#include<cmath>  
#include<iostream>  
#include<sstream>  
#include<iterator>  
#include<algorithm>  
#include<string>  
#include<vector>  
#include<set>  
#include<map>  
#include<stack>  
#include<deque>  
#include<queue>
using namespace std;
typedef long long ll;
ll a[100000000];
 
ll C(ll n,ll m)
{

		if (n - m < m)
			m = n - m;
		a[0] = 1;
		for (int i = 1; i <= m; i++) 
		{
			a[i] = (n - i + 1) * a[i - 1] / i;
		}
	return a[m];
}
int main()
{
	ll n,m;
	while (~scanf("%lld%lld",&n,&m) && (n || m))
	{
		
		cout<<C(n,m)<<endl;
	} 
} 

猜你喜欢

转载自blog.csdn.net/sdz20172133/article/details/81638187
今日推荐