組合數
一、知識學習
二、操作實踐



int u_cnr(int n, int r)
{
// 特殊情況
if (n < 0 || r < 0 || n < r) return 0;
if (r == 0 || r == n) return 1;
// C(n, r) = C(n, n - r)
if (r > (n >> 1)) r = n - r;
// 初始化為負數
int c[n - r + 1];
memset(c, -1, sizeof(c));
// 滾動數組
for (int i = 1; i <= r; ++i) {
for (int j = 1; j <= n - r; ++j) {
c[j] += c[j - 1];
}
}
// 返回正數
return -c[n - r];
}
參考:用加法求組合數

浙公網安備 33010602011771號