m0_57103863 2021-05-16 11:49 采纳率: 100%
浏览 152
已采纳

判断集合关系。 给你两个整数集合,你需要判断这两个集合的关系:相等,包含,没有交集还是其他。

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);
    }

    不好意思等的稍微久了一点。大概思路就是排序,然后再找两个集合的相同的数字的数量,然后再判断两个集合的关系。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能