您的位置:首页 > 其它

给定一个字符串,里面用空格分开为多个(>=6)部分组合,如:01 02 03 04 05 06 07 …… 写一个函数返回任意6个组合的字符串: 输出格式实例: 01 02 03 04 05 06 0

2011-11-04 18:15 543 查看
给定一个字符串,里面用空格分开为多个(>=6)部分组合,如:01 02 03 04 05 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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐