7-2 求集合的并集、交集、差集、笛卡尔积(PTA)

本文介绍了如何使用C++和C语言实现集合的并集、交集、差集以及笛卡尔积的计算。通过详细解释各个题目的要求和解决方案,包括输入输出格式,代码实现思路,以及可能出现的问题和解决办法,帮助读者掌握集合操作的编程技巧。
摘要由CSDN通过智能技术生成

第一题:求补集

题目要求:

编写程序求两个集合的并集,程序运行时,输入集合A的元素个数(不大于50)和元素(int型),再输入集合B的元素个数(不大于50)和元素(int型),计算并输出集合C的元素,集合C为A和B的并集。

输入格式:

输入一共有4行,第一行输入集合A的元素个数,第二行输入A的元素,第三行输入B的元素个数,第四行输入B的元素。

输出格式:

输出集合A与集合B的并集,从小到大排序后输出,将数组排序输出的代码可使用如下函数。(如果A或者B不是集合,则直接输出" a or b is not set",注意字母“a”之前有一个空格,字母“t”之后没有空格)

提供部分代码如下:

void prt(int a[], int n)
{
    int i ,j;
    for (i = 0; i < n - 1; i++) {
        for (j = 0; j < n - i - 1; j++) {
            if (a[j] > a[j + 1]) {
                int t = a[j];
                a[j] = a[j + 1];
                a[j + 1] = t;
            }
        }
    }
    for (i = 0; i < n - 1; i++) {
        cout << a[i] << ' ';
    }
    cout << a[i] << endl;
}

一、完整答案(附上详细注释):

#include<iostream>
using namespace std;
#include<stdlib.h>

//排序输出函数
void prt(int a[], int n)//形参表已经定义的变量,a[],n,函数体就不需要再定义
{
	int i, j;
	for (i = 0; i < n - 1; i++)
	{
		for (j = 0; j < n - i - 1; j++)
		{
			if (a[j] > a[j + 1])
			{
				int t = a[j];
				a[j] = a[j + 1];
				a[j + 1] = t;
			}
		}
	}
	for (i = 0; i < n - 1; i++)
	{
		cout << a[i] << ' ';
	}
	cout << a[i] << endl;
}

//判断是否为集合。  是,返回1;  不是,返回0;
int judge(int n, int arr[])
{
	if (n == 0)//0个元素,空集,是集合
	{
		return 1;
	}
	else if (n == 1)//一个元素,是集合
	{
		return 1;
	}

	else  //多个元素了
	{
		for (int i = 0; i < n; i++)
		{
			for (int j = 0; j < n; j++)
			{
				if (i != j)
				{
					if (arr[i] == arr[j])
					{
						cout << " a or b is not set" << endl;
						return 0;
						//一旦有相同的就可以判断不是集合,输出指定提示,直接终止所有程序,return只能终止该函数奥
					}
				}
			}
		}
	}
}

int main()
{
	//一:AB的输入

	int a, b;//两个数组分别的元素个数
	int A[50], B[50], C[100];//定义集合A,B。并集C () 

	cin >> a;//输入A的元素个数
	for (int i = 0; i < a; i++)//输入
	{
		cin >> A[i];
		C[i] = A[i];//顺便储存相同元素到C数组,后续只需找出B中不同于C的元素,添入C中,即可 完成并集录入 
	}

	cin >> b;//输入B元素个数 
	for (int i = 0; i < b; i++)
	{
		cin >> B[i];//输入B
	}

	//二:判断输入的A和B是不是集合,任意一个是,退出整个程序
	if (judge(a, A) == 0 || judge(b, B) == 0)
	{
		return 0;//任何一个不是集合则退出main函数
		//不能像上面一样单独调用两次
	}


	//三:求AB并集,C数组

	//1.如果AB均为空集,直接结束程序
	if (a == 0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值