【发布时间】:2020-06-11 06:24:59
【问题描述】:
#include <stdio.h>
void powerSet(int* a, int index, int *curr, int N) {
if (index == N)
return;
printf("(");
for(int i = 0; i <= index; i++)
printf("%d, ", curr[i]);
printf(")\n");
// processing here.
int x = index + 1;
for (int i = index + 1; i < N; i++) {
curr[x] = a[i];
// curr += str[i];
powerSet(a, i, curr, N);
}
return;
}
int main(){
int a[] = {10,12,14,17};
int *curr = (int*)malloc(sizeof(int) * 50);
int n = 4;
powerSet(&(*a),-1,curr,n);
}
上面的代码似乎有一些逻辑错误。有人可以指出来吗? 运行代码时得到的输出如下所示:
()
(10, )
(10, 12, )
(10, 12, 14, )
(10, 12, 14, 17, )
(10, 12, 17, 17, )
(10, 14, 17, )
(10, 14, 17, 17, )
(10, 17, 17, 17, )
(12, 17, )
(12, 17, 14, )
(12, 17, 14, 17, )
(12, 17, 17, 17, )
(14, 17, 17, )
(14, 17, 17, 17, )
(17, 17, 17, 17, )
【问题讨论】:
-
在第一个循环中,条件
i <= index;立即为true,因为-1已传递给index。所以空括号被输出。预期的输出是什么? -
不相关,但为什么是
int *curr = (int*)malloc(sizeof(int) * 50)而不是int curr[50]? -
...我的意思是
false但我相信你意识到我的意思是循环不会迭代。 -
@Giridhar 请edit您的问题添加请求的信息。请不要将输出描述为“数组的幂集”,而是显示代码中示例数组的输出应该是什么样子。
-
@Bodo:问题包含足够的信息。