【发布时间】:2017-04-16 16:00:58
【问题描述】:
我有一个从 0 到 k (0
void generate(int n, int k) {
int q = -1;
char res = '|';
int r;
int j;
for (j = 1; j <= n; j++) {
q = j / (k + 1);
r = j % (k + 1);
printf("%d %c", r, res);
}
}
int main() {
int n = 2;
int k = 2;
int i, nbr_comb;
nbr_comb = pow((k + 1), n); number of combinations
for (i = 0; i < nbr_comb; i++) {
generate(n, i);
printf("\n");
}
return (EXIT_SUCCESS);
}
对于这个测试 (N=2 K=2) 我有这些组合
0 |0 |
1 |0 |
1 |2 |
1 |2 |
1 |2 |
1 |2 |
1 |2 |
1 |2 |
1 |2 |
你看到它开始生成但它固定在一个点上,我找不到原因! ?
预期示例: 对于 n=2 k=2 n=3 k=2
0 0 0 0 0
0 1 0 0 1
0 2 0 0 2
1 0 1 0 0
1 1 1 0 1
1 2 1 0 2
2 0 1 1 0
2 1 1 1 1
2 2 1 1 2
1 2 0
1 2 1
1 2 2
2 0 0
.....
【问题讨论】:
-
我确实读过这个,它不是组合而是排列,它不接受 N 中重复的 k 值,在我的情况下,我需要所有可能的组合,即使是具有重复值的组合,例如 (0|0|1 - 2|1|2 ...)
-
这段代码只是选择不会产生所有可能性的选择
-
我不认为我完全理解 N 和 K 代表什么,但预期的结果应该是 000, 001, 002, 010,... 222。对吧?
标签: c combinations