#include<cstdlib> #include<iostream> #include<vector> using namespace std; void print(const vector<int>& vec) { vector<int>::const_iterator iter = vec.begin(); for(; iter!=vec.end(); iter++) cout << *iter << " "; cout << endl; } void find_combination(int* arr, int num, vector<int>& vec)//不去重的求组合实现 { if(num == 0) { print(vec); return; } if(arr[0] == -1) return; vec.push_back(arr[0]); find_combination(arr+1,num-1,vec); vec.pop_back(); find_combination(arr+1,num,vec); } void find_combination2(int* arr,int num, vector<int>& vec)//可以去重,以-1结束。 { if(num == 0) { print(vec); return; } if(arr[0] == -1) return; vec.push_back(arr[0]); find_combination(arr+1,num-1,vec); vec.pop_back(); while(*arr == *(arr+1)) arr++; find_combination(arr+1,num,vec); } int compare(const void* a, const void* b) { if(*(int*)a > *(int*)b) return 1; else return *(int*)a < *(int*)b ? -1:0; } void combination(int* arr, int len,vector<int>& vec) { if(arr == NULL || len <= 0) return; for(int i =1; i <= len; i++ ) find_combination2(arr,i,vec); } int main() { vector<int> vec; // int arr[] = {1,2,3,-1}; int arr[] = {4,1,1,-1}; qsort(arr,3,sizeof(int),compare); int len = sizeof(arr) / sizeof(arr[0]); combination(arr,len,vec); return 0; }
数组元素的组合c++代码