我希望生成所有这些数字:
1位数: 1,2,3,4,5,6,7,8,9 - (我知道有9个数字1 数字)
2位数: 12,13..19然后21,23 ... 29 ....... 91,92,93,... 98(我知道 有9 * 8 = 72个2位数字)...
...
9位数: 123456789 .... 987654321(我知道有9个!数字9个 数字)所有数字彼此不同
我认为手动编写所有循环并不是一个好主意。所以我知道你最有可能不得不使用回溯方法,但我还没有使用它一段时间。
答案 0 :(得分:0)
您希望使用 n = 9 生成所有k-permutations of n。问题Partial permutations对C ++有几个有用的答案。我将一个实现移植到C并根据您的需要进行调整:
#include <stdio.h>
#include <string.h>
void comb(char *rest, int n)
{
static int sofar;
static char sogood[10];
if (n == 0)
puts(sogood);
else
for (int i = 0; i < strlen(rest); i++)
{
sogood[sofar] = rest[i];
char substring[10];
strcpy(memcpy(substring, rest, i)+i, rest+i+1);
++sofar, comb(substring, n-1), --sofar;
}
}
int main()
{
for (int k = 1; k <= 9; ++k)
comb("123456789", k);
}