计算(n,r)
方法一:连乘r个整商
#include<iostream> using namespace std; int main() { int n, r; while (cin >> n >> r) { int ans = 1; for (int i = 1; i <= r; i++) ans =ans* n-- / i; cout << ans << endl; } }
方法2:利用二项式计算公式(n,r)=(n-1,r)+(n-1,r-1);
#include<iostream> #include<cstring> using namespace std; typedef unsigned long long int; unsigned int c[110][110]; void pp() { memset(c, 0, sizeof(c)); c[1][1] = 1; for (int i = 0; i < 102; i++) c[i][0] = 1; for (int i = 1; i < 101; i++) for (int j = 1; j < 101; j++) c[i][j] = c[i - 1][j-1] + c[i - 1][j]; } int main() { int n, r; pp(); while (cin >> n >> r) cout << c[n][r] << endl; }