鱼C论坛

 找回密码
 立即注册
查看: 2661|回复: 2

[已解决]集合运算

[复制链接]
发表于 2023-4-23 21:53:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
题目描述

输入两个集合A、B,按元素升序输出集合的并,交,A-B,B-A, 对称差,并判断和输出两个集合的关系(一共五种):A is superset of B,A is subset of B,A = B,A intersects B,The intersection of A and B is empty。




输入

第一行,n, 集合A的n个整数元素

第二行,m, 集合B的m个整数元素


输出

四行,每行分别输出按元素升序的集合并,交,A-B,B-A, 对称差结果。如果空集,输出None。具体输出格式见样例。

一行,输出两个集合的关系。



输入样例1
5 10 20 4 5 6
3 4 15 6
输出样例1
union: 4 5 6 10 15 20
intersection: 4 6
difference(A-B): 5 10 20
difference(B-A): 15
symmetric_difference: 5 10 15 20
A intersects B
最佳答案
2023-5-20 11:14:55
以下是这道题的 Python 代码实现:
  1. n = int(input())
  2. set_a = set(map(int, input().split()))
  3. m = int(input())
  4. set_b = set(map(int, input().split()))

  5. # 计算集合并、交、差、对称差
  6. un = sorted(list(set_a.union(set_b)))
  7. insec = sorted(list(set_a.intersection(set_b)))
  8. diff_a = sorted(list(set_a.difference(set_b)))
  9. diff_b = sorted(list(set_b.difference(set_a)))
  10. sym_diff = sorted(list(set_a.symmetric_difference(set_b)))

  11. # 输出集合并、交、差、对称差
  12. print("union:", end=" ")
  13. if un:
  14.     print(*un)
  15. else:
  16.     print("None")
  17. print("intersection:", end=" ")
  18. if insec:
  19.     print(*insec)
  20. else:
  21.     print("None")
  22. print("difference(A-B):", end=" ")
  23. if diff_a:
  24.     print(*diff_a)
  25. else:
  26.     print("None")
  27. print("difference(B-A):", end=" ")
  28. if diff_b:
  29.     print(*diff_b)
  30. else:
  31.     print("None")
  32. print("symmetric_difference:", end=" ")
  33. if sym_diff:
  34.     print(*sym_diff)
  35. else:
  36.     print("None")

  37. # 判断两个集合的关系
  38. if set_a.issuperset(set_b):
  39.     print("A is superset of B")
  40. elif set_a.issubset(set_b):
  41.     print("A is subset of B")
  42. elif set_a == set_b:
  43.     print("A = B")
  44. elif set_a.isdisjoint(set_b):
  45.     print("The intersection of A and B is empty")
  46. else:
  47.     print("A intersects B")
复制代码

代码说明如下:

1.首先读入输入数据,使用 set() 函数将输入的整数元素转换为集合类型。

2.然后依次求出并、交、差、对称差。这些计算可以通过使用集合的内置函数 union()、intersection()、difference() 和 symmetric_difference() 实现。同时,需要使用 list() 函数将计算结果转换为列表类型

3.在每行的开头输出对应关系的名称,如果计算结果为空集,则输出 None。

4.最后通过使用 issubset()、issuperset()、isdisjoint() 判断两个集合之间的关系,并输出相应的判断结果。 若上述三种情况都不满足,则说明两个集合存在交集,输出 “A intersects B”。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-4-23 21:55:51 | 显示全部楼层
  1. def main():
  2.     A = set(map(int, input().split()))
  3.     B = set(map(int, input().split()))

  4.     union = sorted(A | B)
  5.     intersection = sorted(A & B)
  6.     difference_A_B = sorted(A - B)
  7.     difference_B_A = sorted(B - A)
  8.     symmetric_difference = sorted(A ^ B)

  9.     print("union:", " ".join(map(str, union)) if union else "None")
  10.     print("intersection:", " ".join(map(str, intersection)) if intersection else "None")
  11.     print("difference(A-B):", " ".join(map(str, difference_A_B)) if difference_A_B else "None")
  12.     print("difference(B-A):", " ".join(map(str, difference_B_A)) if difference_B_A else "None")
  13.     print("symmetric_difference:", " ".join(map(str, symmetric_difference)) if symmetric_difference else "None")

  14.     if A.issuperset(B):
  15.         print("A is superset of B")
  16.     elif A.issubset(B):
  17.         print("A is subset of B")
  18.     elif A == B:
  19.         print("A = B")
  20.     elif A & B:
  21.         print("A intersects B")
  22.     else:
  23.         print("The intersection of A and B is empty")


  24. if __name__ == "__main__":
  25.     main()
复制代码


请将以上代码复制到你的 Python 编辑器或 IDE 中,运行即可得到你需要的答案。这个程序首先接收输入的两个集合 A 和 B,然后计算它们的并集、交集、差集和对称差,并按升序输出。最后,程序将判断并输出两个集合之间的关系。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-20 11:14:55 | 显示全部楼层    本楼为最佳答案   
以下是这道题的 Python 代码实现:
  1. n = int(input())
  2. set_a = set(map(int, input().split()))
  3. m = int(input())
  4. set_b = set(map(int, input().split()))

  5. # 计算集合并、交、差、对称差
  6. un = sorted(list(set_a.union(set_b)))
  7. insec = sorted(list(set_a.intersection(set_b)))
  8. diff_a = sorted(list(set_a.difference(set_b)))
  9. diff_b = sorted(list(set_b.difference(set_a)))
  10. sym_diff = sorted(list(set_a.symmetric_difference(set_b)))

  11. # 输出集合并、交、差、对称差
  12. print("union:", end=" ")
  13. if un:
  14.     print(*un)
  15. else:
  16.     print("None")
  17. print("intersection:", end=" ")
  18. if insec:
  19.     print(*insec)
  20. else:
  21.     print("None")
  22. print("difference(A-B):", end=" ")
  23. if diff_a:
  24.     print(*diff_a)
  25. else:
  26.     print("None")
  27. print("difference(B-A):", end=" ")
  28. if diff_b:
  29.     print(*diff_b)
  30. else:
  31.     print("None")
  32. print("symmetric_difference:", end=" ")
  33. if sym_diff:
  34.     print(*sym_diff)
  35. else:
  36.     print("None")

  37. # 判断两个集合的关系
  38. if set_a.issuperset(set_b):
  39.     print("A is superset of B")
  40. elif set_a.issubset(set_b):
  41.     print("A is subset of B")
  42. elif set_a == set_b:
  43.     print("A = B")
  44. elif set_a.isdisjoint(set_b):
  45.     print("The intersection of A and B is empty")
  46. else:
  47.     print("A intersects B")
复制代码

代码说明如下:

1.首先读入输入数据,使用 set() 函数将输入的整数元素转换为集合类型。

2.然后依次求出并、交、差、对称差。这些计算可以通过使用集合的内置函数 union()、intersection()、difference() 和 symmetric_difference() 实现。同时,需要使用 list() 函数将计算结果转换为列表类型

3.在每行的开头输出对应关系的名称,如果计算结果为空集,则输出 None。

4.最后通过使用 issubset()、issuperset()、isdisjoint() 判断两个集合之间的关系,并输出相应的判断结果。 若上述三种情况都不满足,则说明两个集合存在交集,输出 “A intersects B”。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-24 01:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表