[cpp] 조합 구현 코드
cpp, combination조합(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;
}