给定正整数n,求1~n构成的集合的所有子集,求C语言代码
时间: 2024-10-26 17:03:20 浏览: 18
在C语言中,我们可以使用递归函数来生成一个整数集合所有子集的数组。这里是一个简单的示例代码,用于生成1到n的所有非空子集:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 64 // 可能的最大子集元素数量,可以根据实际需求调整
void generate_subsets(int n, int current[], int index, int* result) {
if (index == n + 1) { // 当遍历完当前子集
result[index] = 0; // 结束标志
return;
}
// 将当前元素添加到子集中
current[index] = 1;
generate_subsets(n, current, index + 1, result); // 递归处理下一个位置
// 如果当前元素不在子集中,也处理一种情况
current[index] = 0;
generate_subsets(n, current, index + 1, result);
}
int main() {
int n;
printf("请输入一个正整数n: ");
scanf("%d", &n);
int* subsets = malloc(MAX_SIZE * sizeof(int)); // 存储结果的空间
if (!subsets) {
printf("内存分配失败\n");
return 1;
}
int current[MAX_SIZE]; // 临时数组存储子集状态
int count = 0;
generate_subsets(n, current, 0, subsets); // 开始生成子集
for (int i = 0; subsets[i] != 0; i++) {
count++;
for (int j = 0; j <= n; j++) {
if (subsets[j] == 1) {
printf("%d ", j);
}
}
printf("\n");
}
free(subsets);
printf("共有%d个子集\n", count);
return 0;
}
```
当你运行这个程序时,它会提示输入一个正整数n,并输出从1到n所有非空子集。
阅读全文