第一题:求补集
题目要求:
编写程序求两个集合的并集,程序运行时,输入集合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