欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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 
相关标签: 刷题