跟上次输出一个字符串的排列类似,http://zrj.me/archives/472,要求输出一个字符串的组合,思路也是递归
#include <stdio.h>
#include <string.h>
void combine(char str[], int str_index, char res_total, char result[], int res_index)
{
if (res_total == res_index)
{
for (int i=0; i<res_total; i++)
{
printf("%c ", result[i]);
}
printf("n");
}
else if (str_index==strlen(str))
{
return;
}
else
{
result[res_index] = str[str_index];
combine(str, str_index+1, res_total, result, res_index+1);
combine(str, str_index+1, res_total, result, res_index);
}
}
int main()
{
char str[100];
char result[100];
scanf("%s", str);
for (int i = 1; i<=strlen(str); i++)
{
combine(str, 0, i, result, 0);
}
return 0;
}
输入输出
abcd a b c d a b a c a d b c b d c d a b c a b d a c d b c d a b c d
可以发现没有考虑去重的情况,这个应该比较容易,就是预处理扫一遍,如果是 ascii 字符的话,那么把输入的 str 映射要一个位图上就可以了。