題目:給你一些字母,輸出m個元素組成的不同組合。
分析:組合數學,重集組合。利用dfs求解即可,每次判斷是否和前一次的前綴相同即可。
說明:╮(╯▽╰)╭。
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
char buf[31], save[31], last[31];
void dfs(int n, int m, int s, int d)
{
if (d == m) {
strcpy(last, save);
puts(save);
return;
}
for (int i = s; i < n; ++ i) {
save[d] = buf[i];
int flag = 1;
for (int j = 0; j <= d; ++ j)
if (save[j] != last[j]) {
flag = 0;break;
}
if (!flag) dfs(n, m, i+1, d+1);
}
}
int main()
{
int m;
while (~scanf("%s%d",buf,&m)) {
memset(save, 0, sizeof(save));
memset(last, 0, sizeof(last));
sort(buf, buf+strlen(buf));
dfs(strlen(buf), m, 0, 0);
}
return 0;
}