用c语言编写程序:输入任意一个正整数n, 输出{1, 2, …, n}的所有子集
时间: 2024-09-17 11:06:56 浏览: 39
输出n个整数的所有子集
5星 · 资源好评率100%
在C语言中,我们可以使用递归来生成并打印所有正整数集合{n, n-1, ..., 1}的所有子集。这里有一个简单的示例程序,但它会生成非常多重复的子集,因为它是基于深度优先搜索的,不是最优解。为了优化,可以采用回溯法或动态规划,但这需要更多的代码。
```c
#include <stdio.h>
// 用于标记数组元素是否选中
#define SELECTED 1
#define NOT_SELECTED 0
void generateSubsets(int* arr, int n, int index) {
// 如果已经到达最后一个位置,打印当前子集
if (index == n) {
for (int i = 0; i <= n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
} else {
// 选择当前元素
arr[index] = SELECTED;
generateSubsets(arr, n, index + 1);
// 不选择当前元素
arr[index] = NOT_SELECTED;
generateSubsets(arr, n, index + 1);
}
}
int main() {
int n;
printf("请输入一个正整数n:");
scanf("%d", &n);
// 初始化数组,所有元素默认未选中
int* arr = malloc(sizeof(int) * (n + 1));
for (int i = 0; i <= n; i++)
arr[i] = NOT_SELECTED;
generateSubsets(arr, n, 0);
free(arr);
return 0;
}
```
阅读全文