B - 判断集合关系 样例输出 样例输入 输入第二行包含一些整数,第一个整数表示集合的大小,接下来个整数代表集合中的数。 BisapropersubsetofA 212 若和没有交集,输出AandBaredisjoint; 样例 若两集合相等,输出AequalsB; 输入第一行包含一些整数,第一个整数表示集合的大小,接下来个整数代表集合中的数。 数据范围及限制 题目描述 不满足以上所有情况,输出Iamconfused!。 若真包含于,输出BisapropersubsetofA; Kanade 给你两个整数集合,你需要判断这两个集合的关系:相等,包含,没有交集还是其他。 若真包含于,输出AisapropersubsetofB; 3123 输入 输出 你需要对两个集合的关系作出判断: ,集合中整数范围在内。保证集合中不会出现重复的元素。
3条回答 默认 最新
- CSDN专家-三岁丫 2021-05-16 19:03关注
#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); }
不好意思等的稍微久了一点。大概思路就是排序,然后再找两个集合的相同的数字的数量,然后再判断两个集合的关系。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
- ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
- ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
- ¥20 腾讯企业邮箱邮件可以恢复么
- ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
- ¥15 错误 LNK2001 无法解析的外部符号
- ¥50 安装pyaudiokits失败
- ¥15 计组这些题应该咋做呀
- ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
- ¥15 让node服务器有自动加载文件的功能