从数组{10,20,30,40,50,60}中求出和等于60的子数组。
用布尔向量例如{0,1,0,1,0,0}来表示结果。
#include <iostream> #include <vector> #include <algorithm> using namespace std; bool ValidOrder(vector<int>::iterator it1, vector<int>::iterator it2, int * s, int total) { int nSize=it2-it1; int sum=0; for(int i=0; i<nSize; i++) { if(*(it1+i)==1) sum+=s[i]; } return sum==total; } void main() { int X[]={10,20,30,40,50,60}; int y=60; int n=sizeof(X)/sizeof(int); vector<int>v(6); for(int k=0; k<n; k++) { if(n-k-2>=0) fill(v.begin(), v.begin()+n-k-2, 0); fill(v.begin()+n-k-1, v.end(), 1); do { if(ValidOrder(v.begin(), v.end(), X, y)) { copy(v.begin(), v.end(), ostream_iterator<int>(cout,"\t")); cout<<endl; } }while(next_permutation(v.begin(), v.end())); } }