# Math# Factorial# Combinatorics

a623 - 3. Combination

🔗 前往 ZeroJudge 原題

題目描述

題目要求計算從 n 個物品中取出 m 個的組合數,公式為 n! / (m! * (n-m)!)。輸入為 n 和 m 的值,輸出為組合數。

解題思路

程式碼直接計算 n!、m! 和 (n-m)!,然後進行除法運算得到組合數。由於題目聲明不需要擔心整數溢位,因此直接使用 long long int 儲存階乘值即可。程式碼中分別計算 n! 和 m! * (n-m)!,然後進行除法運算。

複雜度分析

  • 時間複雜度: O(n)
  • 空間複雜度: O(1)

程式碼

#include <iostream>
using namespace std;
int main(){
	int a,b;
	while(cin >> a >> b){
		long long int n=1,m=1;
		for(int i=1;i<=a;i++){
			n*=i;
		}
		for(int i=1;i<=a-b;i++){
			m*=i;
		}
		for(int i=b;i>0;i--){
			m*=i;
		}
		cout << n/m << endl;
	}
}

Discussion