给定一个字符串,里面用空格分开为多个(>=6)部分组合,如:01 02 03 04 05 06 07 ……
写一个函数返回任意6个组合的字符串:
输出格式实例:
01 02 03 04 05 06
01 02 03 04 06 07
……
写一个函数返回任意6个组合的字符串:
输出格式实例:
01 02 03 04 05 06
01 02 03 04 06 07
……
05 06 07 08 09 10
#include <iostream>
using namespace std;
template<class T>
void output(T *arr/*原数组*/, int *arrindex/*索引数组*/, int Indexlen/*索引数组的长度*/)
{
try{
for (int i=0;i<Indexlen;i++) {
cout<<arr[arrindex[i]];
}
cout<<endl;
}
catch (...) {
cout<<"out of bound"<<endl;
}
}
template<class T>
void GetChildSet(T *arr /*原数组*/, int arrLen/*原数组总个数*/, int childLen/*子集的长度*/, void (* poutput)(T *arr, int *arrindex, int Indexlen)/*输出函数*/)
{
int k;
int* piTem = new int[childLen+1];
for (int i=0;i<childLen;i++) { //initial arry for loop
piTem[i]=i;
}
if (childLen>arrLen) {
return ;
}
if (childLen<arrLen)
k = childLen-1;
else
k = 1;
while (k!=-1)
{
poutput(arr, piTem, childLen);
if (piTem[k]<arrLen-childLen+k)
k = childLen - 1;
else
k--;
if (k!=-1) {
piTem[k]+=1;
}
for (int i=k+1;i<childLen;i++) {
piTem[i] = piTem[k] + i - k;
}
}
delete [] piTem;
}
int main()
{
char a[]={'a','b','c','d','e','f'};
GetChildSet<char>(a, 6, 4, output);
getchar();
return 0;
}