本文主要是介绍Combination(n,m),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
描述
输入
输出
样例输入
样例输出
描述
input a string(no more than 10characters),select m char from the string,output the permutation characters in lexicographic order.
输入
input a string,and integer m; m less then the length of the string. if m=0, output nothing ,and you can input another string
输出
output the permutation strings in lexicographic order.
样例输入
123
1
2
3
0
样例输出
1
2
3
12
13
23
123
思路
题意是给我们一个字符串s,给你整数m,将s分成长度为m的子串,注意这题不是全排列,而是组合数,那我们要用到递归思想
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<vector>
using namespace std;
void Combination(string input, int start, int r, string ans, vector<string>& result) {//r代表所截取的字符串长度,ans代表正在构建的组合if (r == 0) {result.emplace_back(ans);return;}for (int i = start; i <= input.length() - r; i++) {ans.push_back(input[i]);Combination(input, i + 1, r - 1, ans, result);//递归调用取出m个字符的组合ans.pop_back();//删除字符串最后一个元素}
}
vector<string> getCombinations(string input, int m) {vector<string> result;Combination(input, 0, m, "", result);return result;
}
int main() {string input;while (cin >> input) {int m;vector<string> combinations;while (cin >> m && m) {combinations = getCombinations(input, m);for (auto s : combinations) cout << s << endl;combinations.clear();}}return 0;
}
这篇关于Combination(n,m)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!