C++的排列组合问题

2024-11-18 13:22:14
推荐回答(2个)
回答(1):

列出 N个数中取M个的全部组合

void combine(int a[], int n, int m, int b[], int M);

参数:
a 存放候选数字
n 总项数
m 取出项数
b 存放选出结果
M = m

#include "stdio.h"

#define MAX 100

void combine(int a[], int n, int m, int b[], int M);

int main(void)
{
int i;
int a[MAX], b[MAX];

for (i = 1; i < 100; i++)
a[i - 1] = i;

combine(a, 5, 4, b, 4);
}

void combine(int a[], int n, int m, int b[], int M)
{
int i, j;

for (i = n; i >= m; i--)
{
b[m - 1] = i - 1;
if (m > 1)
combine(a, i - 1, m - 1, b, M);
else
{
for (j = M - 1; j >= 0; j--)
printf("%d ", a[b[j]]);
printf("\n");
}
}
}

回答(2):

#include // 必须头文件
{
// 假设 str 为你已经取好的数组
while ( next_permutation( str , str + strlen( str ) ) != 0 )
{
cout << str << endl ;
}
}