C++:从n个字符中去m个字符的组合【菊厂面试】
程序员文章站
2022-05-21 11:48:41
...
题目描述
输入含有n个字符的字符串,字符串中没有重复字符,任取m个字符进行组合,按字符原位置顺序(从左至右)一次输出所有组合形式的字符串,每种组合使用空格隔开。
例如:
1)输入:abc 2
2)输出:ab ac bc
3)说明:“ac bc ab” 和 “ab bc ac”是不正确的,因为未按照原字符位置输出;若m=0,m>n,则输出“ERROR”
运行时间限制:1s
运行内存限制:128 MByte
#include <iostream>
#include <cstring>
using namespace std;
void combine(char *source, char *result, int n)
{
int len = strlen(source);
if (n == 0)
{
cout << result << " ";
}
else
{
int i;
int j;
for (j = 0; *(result + j) != '\0'; j++)
;
for (i = 0; i < len; i++)
{
*(result + j) = *source;
*(result + j + 1) = '\0';
source++;
combine(source, result, n - 1);
}
}
}
int main()
{
int n = 0;
char source[100];
for (int i = 0; i < 100; i++)
source[i] = '\0';
cin >> source;
cin >> n;
char result[100];
for (int i = 0; i < 100; i++)
result[i] = '\0';
if (n > 0 && strlen(source) > 0 && n <= (int)strlen(source))
combine(source, result, n);
return 0;
}
输入:asdfg 3
输出:asd asf asg adf adg afg sdf sdg sfg dfg
上一篇: 企鹅厂测开笔试题