演算法競賽4 1 計算組合數

2021-08-15 03:11:17 字數 676 閱讀 7070

編寫函式,引數是兩個非負整數n和m,返回組合數 cm

n=n!

m!(n

−m)!cn

m=n!

m!(n

−m)!

,其中,m<=n<=25。例如,n=25,m=12時答案為5200300。

題目中多次用到n!,將其作為乙個函式編寫是比較合理的。

需要注意的是,應盡量避免結果溢位的情況:

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...