я могу перебирать не подмножеств размера 1Перебор подмножеств любого размера
for(int a = 0; a < size; a++) {
или подмножества размером 2
for(int a1 = 0; a1 < size; a1++) {
for(int a2 = a1+1; a2 < size; a2++) {
или 3
for(int a1 = 0; a1 < size; a1++) {
for(int a2 = a1+1; a2 < size; a2++) {
for(int a3 = a2+1; a3 < size; a3++) {
Но как это сделать это для подмножеств размера n?
Это делает работу, основанную на ответ Адама Розенфельд
void iterate(int *a, int i, int size, int n)
{
int start = 0;
if(i > 0) start = a[i-1]+1;
for(a[i] = start; a[i] < n; a[i]++) {
if(i == n-1) {
// a is the array of indices of size n
for(int k = 0; k < size; k++) {
printf("%d ",a[k]);
}
printf("\n");
}
else
iterate(a, i+1, size, n);
}
}
Не думаю, что вы добавили бы еще несколько комментариев к вашему ответу? Я явно медленный, но я на самом деле не слежу за ним. – Jekowl