Quantcast
Channel: YGC » c++
Viewing all articles
Browse latest Browse all 18

project euler--problem 53

$
0
0
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;
}

Related Posts


Viewing all articles
Browse latest Browse all 18

Trending Articles