子集
假设有两个集合A和B,A集合中的元素全部在B集合里,A集合就包含于B集合了。
空集是任何集合的子集。
上代码:
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
int main() {
int array1_count = 0;
int array2_count = 0;
printf("请输入第一个集合的大小:");
scanf("%d", &array1_count);
while (array1_count < 0) {
printf("非法的大小!请重新输入:");
scanf("%d", &array1_count);
}
int *array1 = (int*)malloc(sizeof(int) * array1_count);
bool is_exist;
int array1_index = 0;
for (int i = 0; i < array1_count; ++i) {
do {
is_exist = false;
printf("请输入第一个集合的第%d个元素:", i + 1);
scanf("%d", &array1[i]);
for (int j = 0; j < array1_index; ++j) {
if (array1[i] == array1[j]) {
printf("元素已存在!\n");
is_exist = true;
break;
}
}
} while (is_exist == true);
++array1_index;
}
printf("请输入第二个集合的大小:");
scanf("%d", &array2_count);
while (array2_count < 0) {
printf("非法的大小!请重新输入:");
scanf("%d", &array2_count);
}
int *array2 = (int*)malloc(sizeof(int) * array2_count);
int array2_index = 0;
for (int i = 0; i < array2_count; ++i) {
do {
is_exist = false;
printf("请输入第二个集合的第%d个元素:", i + 1);
scanf("%d", &array2[i]);
for (int j = 0; j < array2_index; ++j) {
if (array2[i] == array2[j]) {
printf("元素已存在!\n");
is_exist = true;
break;
}
}
} while (is_exist == true);
++array2_index;
}
bool *arr1_include_arr2 = (bool*)malloc(sizeof(bool) * array1_count);
bool *arr2_include_arr1 = (bool*)malloc(sizeof(bool) * array2_count);
for (int i = 0; i < array1_count; ++i) {
arr1_include_arr2[i] = false;
}
for (int i = 0; i < array2_count; ++i) {
arr2_include_arr1[i] = false;
}
if (array1_count < array2_count) {
for (int i = 0; i < array1_count; ++i) {
for (int j = 0; j < array2_count; ++j) {
if (array1[i] == array2[j]) {
arr1_include_arr2[i] = true;
break;
}
}
}
bool all_in = true;
for (int i = 0; i < array1_count; ++i) {
if (arr1_include_arr2[i] == false) {
all_in = false;
break;
}
}
if (all_in == true) {
printf("集合1包含于集合2\n");
} else {
printf("集合1与集合2不存在包含关系\n");
}
} else if (array1_count > array2_count) {
for (int i = 0; i < array2_count; ++i) {
for (int j = 0; j < array1_count; ++j) {
if (array2[i] == array1[j]) {
arr2_include_arr1[i] = true;
break;
}
}
}
bool all_in = true;
for (int i = 0; i < array2_count; ++i) {
if (arr2_include_arr1[i] == false) {
all_in = false;
break;
}
}
if (all_in == true) {
printf("集合2包含于集合1\n");
} else {
printf("集合1与集合2不存在包含关系\n");
}
} else {
for (int i = 0; i < array1_count; ++i) {
for (int j = 0; j < array2_count; ++j) {
if (array1[i] != array2[j]) {
arr1_include_arr2[i] = false;
break;
}
}
}
bool all_in = true;
for (int i = 0; i < array1_count; ++i) {
if (arr2_include_arr1[i] == false) {
all_in = false;
break;
}
}
if (all_in == true) {
printf("集合1与集合2相等\n");
} else {
printf("集合1与集合2不存在包含关系\n");
}
}
free(array1);
free(array2);
if (arr1_include_arr2 != NULL) {
free(arr1_include_arr2);
}
if (arr2_include_arr1 != NULL) {
free(arr2_include_arr1);
}
return 0;
}