输入一个整数数组(题目保证数组中的整数不重复),然后输入两个闭区间,区间A[L1, R1]和区间B[L2, R2],L1, R1代表区间A的左/右边界的数组下标;L2, R2代表区间B的左/右边界的数组下标(下标从0开始,且题目保证下标均在有效范围内不会越界)。输出由这两个区间形成的差集(A-B)的数值。
输入格式:
一个整数n(n不大于20),然后输入n个整数。
最后输入4个整数,分别代表区间A和区间B的左边界和右边界的下标,顺序为:L1 R1 L2 R2
输出格式:
按原数组的顺序依次输出两个区间差集(A-B)中的数值,每个数值后面一个空格。
如果是空集,则输出void
题目分析:
核心任务是计算两个区间形成的差集 A−B,即要找出所有属于区间 A 但不属于区间 B 的元素。这里需要对数组中指定区间内的元素进行遍历和比较。

解答过程:
1.输入处理和数据初始化
n=int(input())
ls=list(map(int,input().split()))
l1,r1,l2,r2=map(int,input().split())
ls_a=[]
ls_b=[]
ls_c=[]
首先读入一个整数n,再依次读入n个整数并存储在列表里,接着读入代表区间A的左/右边界的数组下标的L1, R1和代表区间B的左/右边界的数组下标的L2, R2。
初始化三个空列表,分别为ls_a,ls_b,ls_c。
ls_a 用于存储区间A内的元素。
ls_b 用于存储区间B内的元素。
ls_c 用于存储区间A和区间B的差集(A - B)的元素。
2.差集计算
for i in range(l1,r1+1):
ls_a.append(ls[i])
for i in range(l2,r2+1):
ls_b.append(ls[i])
for i in ls_a:
if i not in ls_b:
ls_c.append(i)
先分别提取区间A和B中的元素,运用 for 循环遍历 ls_a 列表中的每个元素。对于每个元素,使用 if i not in ls_b 来判断该元素是否不在 ls_b 列表中。若不在,就把该元素添加到 ls_c 列表中,这样 ls_c 就存储了区间 A 和区间 B 的差集。
3.输出处理
if len(ls_c) != 0:
for i in range(len(ls_c)):
print(f"{ls_c[i]} ", end='')
else:
print('void')
if len(ls_c) != 0 用于检查 ls_c 列表是否为空。若不为空,使用 for 循环遍历 ls_c 列表,利用 print(f"{ls_c[i]} ", end='') 按顺序输出每个元素,并且每个元素后面跟一个空格,end='' 表示输出后不换行。若 ls_c 列表为空,说明差集为空,就输出字符串 "void"。
输入样例:
20
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
0 9 4 12
输出样例:
11 12 13 14
运行结果:

476

被折叠的 条评论
为什么被折叠?



