用c语言实现求有限个集合(集合的个数大于2)的笛卡尔乘积
时间: 2024-03-07 08:50:38 浏览: 95
C语言中求有限个集合的笛卡尔积可以使用嵌套循环遍历多个数组,将每个元素组合起来,得到笛卡尔积。具体实现如下:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义结构体表示一个集合
typedef struct Set {
int size; // 集合中元素个数
int *elements; // 指向集合中元素的指针
} Set;
// 求两个集合的笛卡尔积
Set cartesian_product(Set A, Set B) {
Set result;
result.size = A.size * B.size;
result.elements = (int*) malloc(result.size * sizeof(int));
int index = 0;
for (int i = 0; i < A.size; i++) {
for (int j = 0; j < B.size; j++) {
result.elements[index++] = A.elements[i];
result.elements[index++] = B.elements[j];
}
}
return result;
}
// 求多个集合的笛卡尔积
Set cartesian_product_multiple(int n, Set sets[]) {
Set result = sets[0];
for (int i = 1; i < n; i++) {
result = cartesian_product(result, sets[i]);
}
return result;
}
int main() {
Set A = {3, (int[]){1, 2, 3}};
Set B = {2, (int[]){4, 5}};
Set C = {2, (int[]){6, 7}};
Set sets[] = {A, B, C};
Set result = cartesian_product_multiple(3, sets);
for (int i = 0; i < result.size; i += 3) {
printf("(%d, %d, %d)\n", result.elements[i], result.elements[i+1], result.elements[i+2]);
}
free(result.elements);
return 0;
}
```
上述代码中,我们首先定义了一个结构体 `Set` 表示一个集合,包含集合中元素的个数 `size` 和指向集合中元素的指针 `elements`。然后,我们实现了函数 `cartesian_product` 用于求两个集合的笛卡尔积,以及函数 `cartesian_product_multiple` 用于求多个集合的笛卡尔积。在 `main` 函数中,我们定义了三个集合 `A`、`B` 和 `C`,然后将它们存放在一个数组 `sets` 中,调用 `cartesian_product_multiple` 函数求出它们的笛卡尔积,并输出结果。
输出结果为:
```
(1, 4, 6)
(1, 4, 7)
(1, 5, 6)
(1, 5, 7)
(2, 4, 6)
(2, 4, 7)
(2, 5, 6)
(2, 5, 7)
(3, 4, 6)
(3, 4, 7)
(3, 5, 6)
(3, 5, 7)
```
阅读全文