打印n
元素集的k个元素子集(本质上n选择k)
将每个子集表示为一个数组,并跳过B[0]
。
例如[0 1 0 1]表示要打印的{1,3}。
我相信我的主要问题出在我的printSubsets()
函数中,因为我两次调用了该方法。
但是看起来它无法做到;它会忽略索引中的“ 2”,直到程序结束。
代码
#include <stdio.h>
#include <stdlib.h>
void printSet(int B[], int n) {
for(int j = 1; j <= n; j++) {
printf("%d", B[j]);
}
}
void printSubsets(int B[], int n, int k, int i) {
if(i <= n) {
if(k == 0) {
printSet(B, n);
printf("\n");
}else{
B[i] = 1; //print 1 in the index of interest and recurse
printSubsets(B, n, k-1, i++);
B[i] = 2; //print 2 as a holder to ignore that index
printSubsets(B, n, k, i++);
}
}
}
int main(){
int n;
int k;
scanf("%d %d", &n, &k);
int B[101];
printSubsets(B, n, k, 1);
return EXIT_SUCCESS;
}