如题,给定n个数{1,2,…n},从中选取任意两两不同的k个数,请编写程序输出所有的可能的选择,要求不重不漏。
思路主要是递归的思路,比如有10个数,求3个两两不同的3个数,那么可以化为10个数组,其中每个数组只有9个数,求3个两两不同的3个数,以此递归。
#include <iostream>
#include <vector>
using namespace std;
void GetMinDiffRange(vector<int> &aArr,int aK);
int main(int argc,char** argv){
vector<int> arr;
arr.push_back(1);
arr.push_back(3);
arr.push_back(2);
arr.push_back(7);
GetMinDiffRange(arr,2);
}
void GetMinDiffRange(vector<int> &aArr,int aK){
if (aK<0){
return ;
}
if(aArr.size()<aK){
return;
}else if(aArr.size()==aK){
for(int i=0;i<aArr.size();i++){
cout<<aArr[i]<<"\t";
}
cout<<endl;
return;
}else{
for(int i=0;i<aArr.size();i++){
vector <int> tmpArr;
for(int j=0;j<aArr.size();j++){
if(i!=j){
tmpArr.push_back(aArr[j]);
}
}
GetMinDiffRange(tmpArr,aK);
}
}
}
如果是不同的数字,可能重新生成vector,使得所有的成员数据均不相同