pta题集--数组区间差集

输入一个整数数组(题目保证数组中的整数不重复),然后输入两个闭区间,区间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 

 运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值