离散数学实验(三)集合的基本运算

集合的交运算

    假设集合E包含A,B两个任意子集,称集合E为全集,集合的交运算为集合A,B中相同元素的集合,记为A∩B。若集合A,B之间无相同的元素,则交运算的结果为空集。例如:全集为全体整数,集合A={1,2,3,4},集合B={3,4,5,6},则A∩B={3,4}。

集合的并运算

    假设集合E包含A,B两个任意子集,称集合E为全集,集合的并运算为集合A,B包含的所有元素去除重复元素后的集合,记为A∪B,例如:全集为全体整数,集合A={1,2,3,4},集合B={3,4,5,6},则A∪B={1,2,3,4,5,6}。

集合的差运算

    假设集合E包含A,B两个任意子集,称集合E为全集,集合的差运算为集合A去除集合B中与集合A相同元素的集合,记为A−B。例如:全集为全体整数,集合A={1,2,3,4},集合B={3,4,5,6},则A−B={1,2}

集合的补运算

    假设有全集E,集合A为全集E中的任意子集,集合A的补运算为不在集合A中的其他全集元素,记为Aˉ=E−A。例如:全集E={1,2,3,4,5},集合A={1,2,3,4},则E-A={5}

集合的对称差

    假设集合E包含A,B两个任意子集,称集合E为全集,集合的对称差运算为集合A,B的并集中去除集合A,B中相同的元素,记为A⊕B=(A∪B)−(A∩B)。例如:全集为全体整数,集合A={1,2,3,4},集合B={3,4,5,6},则A⊕B={1,2,5,6}

编程要求

    根据提示,练习集合的基本运算法则。

提示:

例子:全集为E={1,2,3,4,5},集合A,B的互为补集,验证E-A=B:

#include<iostream>
using namespace std;
int PanDuan(int *a, int n, int b) //判断b是否在a中
{
	int i;
	for (i = 0; i < n; i++) {
		if (b == a[i])
			return 1;
	}
	return 0;
}
int main()
{
	int n, m;
	int i, j;
	int a[100], b[100],c[100];
	int cnt = 0;
	cin >> n;
	for (i = 0; i < n; i++)
	{
		cin >> a[i];
	}
	cin >> m;
	for (i = 0; i < m; i++)
	{
		cin >> b[i];
	}
	for (i = 0; i < m; i++)
	{
		if (PanDuan(a, n, b[i]))
		{
			c[cnt++] = b[i];
		}
	}
	cout << "交集为:" << endl;
	for (i = 0; i < cnt; i++)
	{
		cout << c[i] << ' ';
	}
	cout << endl << "a-b差为:" << endl;
	for (i = 0; i < cnt; i++)
	{
		if (PanDuan(a, n, c[i]))
		{
			int qwq;
			for (int k = 0; k < n; k++)
			{
				if (c[i] == a[k]) qwq = k;
			}
			for (j = qwq; j <= n; j++)
			{
				a[j] = a[j + 1];
				
			}n--;
		}
	}
	for (i = 0; i < n; i++)
	{
		cout << a[i] << " ";
	}
	cout << endl << "b对于a的补集为:" << endl;
	for (i = 0; i < cnt; i++)
	{
		if (PanDuan(a, n, c[i]))
		{
			int qwq;
			for (int k = 0; k < n; k++)
			{
				if (c[i] == a[k]) qwq = k;
			}
			for (j = qwq; j <= n; j++)
			{
				a[j] = a[j + 1];

			}n--;
		}
	}
	for (i = 0; i < n; i++)
	{
		cout << a[i] << " ";
	}
	cout << endl << "并集为:" << endl;
	for (i = 0; i < n; i++)
	{
		cout << a[i] << " ";
	}
	for(i = 0; i < m; i++)
	{
		cout << b[i] << " ";
	}
	cout << endl << "对称差:" << endl;
	for (i = 0; i < cnt; i++)
	{
		if (PanDuan(b, m, c[i]))
		{
			int qwq;
			for (int k = 0; k < m; k++)
			{
				if (c[i] == b[k]) qwq = k;
			}
			for (j = qwq; j <= m; j++)
			{
				b[j] = b[j + 1];

			}m--;
		}
	}
	for (i = 0; i < n; i++)
	{
		cout << a[i] << " ";
	}
	for (i = 0; i < m; i++)
	{
		cout << b[i] << " ";
	}
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值