C语言 集合运算 并、交,相对补,对称差,判断两个集合是否相等,求集合幂集(改进幂集)
2017-06-28 21:08
381 查看
任务描述
编写程序实现两个集 合的并、交,相对补,对称差的运算并判断两个集合是否相等?
功能要求
①输入集合A与集合B的元素。
②输出集合A与B的并、交、相对补、差、对称差运算。
③输出集合A与B是否相等的断定结果。
④输出集合A与B的幂集。
编写程序实现两个集 合的并、交,相对补,对称差的运算并判断两个集合是否相等?
功能要求
①输入集合A与集合B的元素。
②输出集合A与B的并、交、相对补、差、对称差运算。
③输出集合A与B是否相等的断定结果。
④输出集合A与B的幂集。
#include<stdio.h> #include<stdlib.h> int unionSets(int *A, int *B, int lenA, int lenB)//并集 { int i, j; int flag, index = lenB; int *buffer = (int*)malloc(sizeof(int) * (lenA + lenB)); for (i = 0; i < lenB; i++) { buffer[i] = B[i]; } for (i = 0; i < lenA; i++) { flag = 1; for (j = 0; j < lenB; j++) { if (A[i] == B[j]) { flag = 0; } } if (flag) { buffer[index] = A[i]; index++; } } printf("并集:{ "); for (i = 0; i < index; i++) { printf("%d ", buffer[i]); } printf("}\n"); return 0; } int intersection(int *A, int *B, int lenA, int lenB)//交集 { int i, j; int flag, index = 0, len = lenA > lenB ? lenA : lenB; int *buffer = (int*)malloc(sizeof(int) * len); for (i = 0; i < lenA; i++) { flag = 0; for (j = 0; j < lenB; j++) { if (A[i] == B[j]) { flag = 1; } } for (j = 0; j < index; j++) { if (A[i] == buffer[j]) { flag = 0; } } if (flag) { buffer[index] = A[i]; index++; } } printf("交集:{ "); for (i = 0; i < index; i++) { printf("%d ", buffer[i]); } printf("}\n"); return 0; } int complementary(int *A, int *B, int lenA, int lenB)//相对补 { int i, j; int flag, index = 0; int *buffer = (int*)malloc(sizeof(int)*lenA); for (i = 0; i < lenA; i++) { flag = 1; for (j = 0; j < lenB; j++) { if (A[i] == B[j]) { flag = 0; } } if (flag) { buffer[index] = A[i]; index++; } } printf("相对补:{ "); for (i = 0; i < index; i++) { printf("%d ", buffer[i]); } printf("}\n"); return 0; } int SymDifference(int *A, int *B, int lenA, int lenB)//对称差 { int i, j; int flag, index = 0; int *buffer = (int*)malloc(sizeof(int)*lenA); for (i = 0; i < lenA; i++) { flag = 1; for (j = 0; j < lenB; j++) { if (A[i] == B[j]) { flag = 0; } } if (flag) { buffer[index] = A[i]; index++; } } for (i = 0; i < lenB; i++) { flag = 1; for (j = 0; j < lenA; j++) { if (B[i] == A[j]) { flag = 0; } } if (flag) { buffer[index] = B[i]; index++; } } printf("对称差:{ "); for (i = 0; i < index; i++) { printf("%d ", buffer[i]); } printf("}\n"); return 0; } int equalSets(int *A, int *B, int lenA, int lenB)//集合相等 { int top = 0, i, j, temp; int *buffer = (int*)malloc(sizeof(int) * lenA); if (lenA != lenB) { printf("\nA与B相等\n"); return 0; } for (i = 0; i < lenA; i++) { for (j = i + 1; j < lenA; j++) { if (A[i] < A[j]) { temp = A[i]; A[i] = A[j]; A[j] = temp; } } } for (i = 0; i < lenB; i++) { for (j = i + 1; j < lenB; j++) { if (B[i] < B[j]) { temp = B[i]; B[i] = B[j]; B[j] = temp; } } } for (i = 0; i < lenA; i++) { if (A[i] != B[i]) { printf("\nA与B不相等\n"); return 0; } } printf("相等\n"); return 0; } int pow(int n) { int oup = 1; int i; if (n == 0) { return 1; } for (i = 0; i < n; i++) { oup = oup * 2; } return oup; } int powSum(int n) { int sum = 0; int i; for (i = 0; i < n; i++) { sum += pow(i); } return sum; } int judge(int *buffer, int len) { int i; for (i = 0; i < len; i++) { if (buffer[i] == 2) { buffer[i] = 0; buffer[i + 1] += 1; } } } int output(int *A, int *buffer, int len) { int i; printf("{ "); for (i = 0; i < len; i++) { if (buffer[i] == 1) { printf("%d ", A[i]); } } printf("} "); } int powerSets(int *A, int lenA) { int i, j; int *buffer = (int*)malloc(sizeof(int)*lenA); for (i = 0; i < lenA; i++) { buffer[i] = 0; } for (i = 0; i < powSum(lenA); i++) { buffer[0] += 1; judge(buffer, lenA); output(A, buffer, lenA); } } int main() { int *A, *B; int lenA, lenB; int i; printf("输入A,B的元素个数: "); scanf("%d%d", &lenA, &lenB); A = (int*)malloc(sizeof(int) * lenA); B = (int*)malloc(sizeof(int) * lenB); printf("输入A的元素\n"); for (i = 0; i < lenA; i++) { scanf("%d", &A[i]); } getchar(); printf("输入B的元素\n"); for (i = 0; i < lenB; i++) { scanf("%d", &B[i]); } equalSets(A, B, lenA, lenB); unionSets(A, B, lenA, lenB); intersection(A, B, lenA, lenB); printf("A对B的"); complementary(A, B, lenA, lenB); printf("B对A的"); complementary(B, A, lenA, lenB); SymDifference(A, B, lenA, lenB); printf("A的幂集:"); powerSets(A, lenA); printf(" { 空集 }\n"); printf("B的幂集:"); powerSets(B, lenB); printf(" { 空集 }\n"); system("pause"); return 0; }
相关文章推荐
- C语言 集合运算 并、交,相对补,对称差,判断两个集合是否相等,求集合幂集
- 两个集合的并、交,相对补,对称差的运算
- 判断两个集合A和B是否相等(数据结构)
- C语言判断两个浮点数是否相等
- [leetcode]Same Tree(判断两个二叉树是否相等 C语言实现)
- C语言判断两个字符串是否相等
- C# 判断两个集合(List)是否相等
- 在java的集合中是怎么判断两个对象是否相等的?(重要!)
- c语言 判断两个字符串是否相等
- C语言判断两个lpcwstr字符串是否相等的方法
- android、Java下判断两个String是否相等 、EditText输入是否为空,限定输入数字的实现 总结
- [AS3]判断两个对象是否相等
- 使用三目运算符,判断两个对象是否相等(包括null的情况)
- 判断两个(float)变量x,z是否相等 以及和0值比较方法
- 判断两个float或double是否相等
- C#如何判断两个日期是否相等
- python判断两个对象是否相等
- 判断两个集合中是否存在相同的数据并去重
- 给出一个实数集合和一个实数,怎样判断集合中是否存在两个和等于该实数的元素
- 如何比较两个集合是否相等