編寫函式,引數是兩個非負整數n和m,返回組合數 cm題目中多次用到n!,將其作為乙個函式編寫是比較合理的。n=n!
m!(n
−m)!cn
m=n!
m!(n
−m)!
,其中,m<=n<=25。例如,n=25,m=12時答案為5200300。
需要注意
的是,應盡量避免結果溢位的情況:
long
long fac(int x)
return pro;
}long
long c(int n,int m)
需要對上述過程約分
#include
#include
#define local
long
long fac(int x)
return pro;
}long
long c(int n,int m)
else
// n = 25; m = 13; n-m = 12
pro /=fac(n-m);
}return pro;
}int main()
計算組合數
1.防溢位 如果直接用c n,m n!n m m 來程式設計很可能會在算n!時就爆了long long,所以每一步最好把除分母也算上。所以對於c n,m 來說取m min m,n m 來算c n,m n n 1 n 2 n m 1 m m 1 m 2 1 顯然分子分母都是m項相乘,從後往前去算 先算...
計算組合數
計算組合數 time limit 1000ms memory limit 32768kb submit statistic problem description 計算組合數。c n,m 表示從n個數中選擇m個的組合數。計算公式如下 若 m 0,c n,m 1 否則,若 n 1,c n,m 1 否則...
計算組合數
time limit 1000 ms memory limit 32768 kib problem description 計算組合數。c n,m 表示從n個數中選擇m個的組合數。計算公式如下 若 m 0,c n,m 1 否則,若 n 1,c n,m 1 否則,若m n,c n,m 1 否則 c n...