조합(combination)을 구하는 코드는 처음으로 직접 짜 보았다. 원래는 오일러 30번을 풀기 위해 짰는데 다 짜고 나서 보니 조합을 구할 필요가 전혀 없는 문제다 ㅡㅡ;; 20C5 를 구하는 코드.

#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <cmath>
#include <ctime>
#include <vector>

using namespace std;

int MAX = 5;
void combination( int arr[], int arrsize, int choose, int pick, std::vector<int> result)
{
	if( pick >= arrsize) return;

	if ( choose > 0) {
		result.push_back( arr[pick]);
	}

	if( result.size() >= MAX) { 
		for( std::vector<int>::iterator it = result.begin(); it != result.end(); ++it)
		{
			cout << "[" << *it << "]"; 
			if( it != result.end() -1) { cout << "-"; }
		}
		cout << endl;
		return;
	}

	for(int i=pick+1; i<=arrsize;i++)
	{
		combination( arr, arrsize, choose-1, i, result); 
	}
}

int main(int argc, char** argv)
{
	clock_t begin = clock();

	/* starting code */
	int nums[20] = {0,};
	for(int i=0; i<20; i++){
		nums[i] = i;
	}

	std::vector<int> c;
	for(int i=0; i<=16; i++) {
		combination( nums, 20, 5, i, c);
	}
	/* end of code */
	clock_t end = clock();
	std::cout << "elapsed time=" << double(end - begin) / CLOCKS_PER_SEC << std::endl;
	return 0;
}