// String Combination字符串的排列
void Combination(char *string, int number, vector<char> &result);
void Combination(char *string)
{
assert(string != NULL);
vector<char> result;
int i, length = strlen(string);
for (i = 1; i <= length; ++i)
Combination(string, i, result);
}
void Combination(char *string, int number, vector<char> &result)
{
assert(string != NULL);
if (number == 0)
{
static int num = 1;
printf("第%d个组合\t", num++);
vector<char>::iterator iter = result.begin();
for (; iter != result.end(); ++iter)
printf("%c", *iter);
printf("\n");
return;
}
if (*string == '\0')
return;
result.push_back(*string);
Combination(string + 1, number - 1, result);
result.pop_back();
Combination(string + 1, number, result);
}
//Apply the Combination of String http://blog.csdn.net/hackbuteer1/article/details/7462447
//题目:输入两个整数n和m,从数列1,2,3...n中随意取几个数,使其和等于m,要求列出所有的组合。
list<int> list1;
void find_factor(int sum, int n)
{
if (n <= 0 || sum <= 0)
return;
if (sum == n)
{
list1.reverse();
for (list<int>::iterator iter = list1.begin(); iter != list1.end(); iter++)
{
cout << *iter << "+";
}
cout << n << endl;
list1.reverse();
}
list1.push_front(n);
find_factor(sum - n, n - 1);//n放在组合中
list1.pop_front();
find_factor(sum, n - 1);//n不放在组合中
}
字符串排列组合的应用
最新推荐文章于 2017-06-29 19:40:00 发布