Печать подмножеств k-элементов из набора элементов n
(в сущности 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;
}