B - 判断集合关系 样例输出 样例输入 输入第二行包含一些整数,第一个整数表示集合的大小,接下来个整数代表集合中的数。 BisapropersubsetofA 212 若和没有交集,输出AandBaredisjoint; 样例 若两集合相等,输出AequalsB; 输入第一行包含一些整数,第一个整数表示集合的大小,接下来个整数代表集合中的数。 数据范围及限制 题目描述 不满足以上所有情况,输出Iamconfused!。 若真包含于,输出BisapropersubsetofA; Kanade 给你两个整数集合,你需要判断这两个集合的关系:相等,包含,没有交集还是其他。 若真包含于,输出AisapropersubsetofB; 3123 输入 输出 你需要对两个集合的关系作出判断: ,集合中整数范围在内。保证集合中不会出现重复的元素。
#include<stdio.h>
#define SIZE 100001
void qsort(int q[], int l, int r);
int main() {
int n, m;
int i, j;
int arr1[SIZE], arr2[SIZE];
// 获取输入
scanf("%d", &n);
for (i = 0; i < n; i ++)
scanf("%d", &arr1[i]);
scanf("%d", &m);
for (i = 0; i < m; i ++)
scanf("%d", &arr2[i]);
// 将两个集合进行升序排列
qsort(arr1, 0, n - 1);
qsort(arr2, 0, m - 1);
i = 0, j = 0;
int cnt = 0; // 记录两个集合相同的数字的数量
while (i < n && j < m)
{
if (arr1[i] == arr2[j])
{
i++;
j++;
cnt++;
}
else if (arr1[i] > arr2[j])
j++;
else
i++;
}
/*
* 最后一步,也是最关键的一步
* 判断两个集合间的关系
*/
if (cnt == 0)
{
printf("A and B are disjoint");
} else {
if (n == m && cnt == n)
printf("A equals B");
else if (n > m && cnt == m)
printf("B is a proper subset of A");
else if (n < m && cnt == n)
printf("A is a proper subset of B");
else
printf("I am confused!");
}
}
void qsort(int q[], int l, int r)
{
if (l >= r) return;
int i = l - 1, j = r + 1, x = q[l + r >> 1];
while (i < j)
{
do i ++ ; while (q[i] < x);
do j -- ; while (q[j] > x);
if (i < j)
{
int c = q[i];
q[i] = q[j];
q[j] = c;
}
}
qsort(q, l, j);
qsort(q, j + 1, r);
}
不好意思等的稍微久了一点。大概思路就是排序,然后再找两个集合的相同的数字的数量,然后再判断两个集合的关系。
能好好的,重新发一下题目吗
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632