There are exactly ten ways of selecting three from five, 12345: 123, 124, 125, 134, 135, 145, 234, 235, 245, and 345 In combinatorics, we use the notation, 5C3 = 10. In general, nCr = n!/r!(n-r)!,where r ≤ n, n! = n*(n-1)*...*3*2*1, and 0! = 1. It is not until n = 23, that a value exceeds one-million: 23C10 = 1144066. How many, not necessarily distinct, values of nCr, for 1 ≤ n ≤ 100, are greater than one-million?
Recursive function can be very fast when using memory. The static variable in C++ is just like the local global variable in R, which had been illustrated in the post tricky things in R.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | #include<iostream> #include<vector> using namespace std; double fact(int n); int main() { int cnt=0; for (int n=1; n <= 100; n++) { for (int r=1; r <= n; r++) { double comb = fact(n)/(fact(r) * fact(n-r)); if (comb > 1000000) cnt++; } } cout << cnt << endl; return 0; } double fact(int n) { static vector<double> mem; if (n == 0) return 1; if (mem.size() >= n) return mem[n-1]; double res = n*fact(n-1); mem.push_back(res); return res; } |