BBTJDDY 2023-02-25 11:12 采纳率: 100%
浏览 19
已结题

-重复ID蓝桥杯问题-

某涉密单位下发了某种票据,并要在年终全部收回。每张票据有唯一的 ID 号。全年所有票据的 ID 号是连续的,但 ID 的开始数码是随机选定的。因为工作人员疏忽,在录入 ID 号的时候发生了一处错误,造成了某个 ID 断号,另外一个 ID 重号。你的任务是通过编程,找出断号的 ID 和重号的 ID 。假设断号不可能发生在最大和最小号。

输入描述
要求程序首先输入一个整数N (N<100)表示后面数据行数。
接着读入 N 行数据。

每行数据长度不等,是用空格分开的若干个(不大于 100 个)正整数(不大于1*10^5)

输出描述
要求程序输出 1 行,含两个整数 m,n,用空格分隔。
其中,m 表示断号 ID,n 表示重号 ID。

输入输出样例
示例
输入
2
5 6 8 11 9
10 12 9
输出
7 9
运行限制
最大运行时间:1s
最大运行内存: 64M

N = int(input())
b = []
n = 0
m = 0
for i in range(N):
  num = input.split()
  for j in range(len(num)):
      b.append(int(num[j]))
a.sort()
for i in range(len(b)):
  if b[i] != b[0] + i:
    m = b[0] + i
    break
print(m,n)

请问为什么n怎么输出都是0?为什么不是9

  • 写回答

4条回答 默认 最新

  • MarkHan_ 2023-02-25 11:28
    关注

    该回答引用GPTᴼᴾᴱᴺᴬᴵ
    在上述代码中,虽然正确找出了断号 ID,但是重号 ID 并没有找出,因此输出的 n 始终为 0。

    为了找出重号 ID,我们可以对输入数据进行去重,并累计数据总和,然后减去去重后的总和,即为重号 ID。

    下面是修改后的代码:

    N = int(input())
    b = []
    n = 0
    m = 0
    for i in range(N):
        num = input().split()
        for j in range(len(num)):
            b.append(int(num[j]))
    # 找断号 ID
    b.sort()
    for i in range(len(b)):
        if b[i] != b[0] + i:
            m = b[0] + i
            break
    # 找重号 ID
    s = sum(b)
    unique_b = set(b)
    unique_sum = sum(unique_b)
    n = s - unique_sum
    print(m,n)
    

    这样,输出的 n 就可以正确显示重号 ID 了。

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

报告相同问题?

问题事件

  • 系统已结题 3月5日
  • 已采纳回答 2月25日
  • 创建了问题 2月25日

悬赏问题

  • ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作
  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 软件测试决策法疑问求解答
  • ¥15 win11 23H2删除推荐的项目,支持注册表等
  • ¥15 matlab 用yalmip搭建模型,cplex求解,线性化处理的方法
  • ¥15 qt6.6.3 基于百度云的语音识别 不会改
  • ¥15 关于#目标检测#的问题:大概就是类似后台自动检测某下架商品的库存,在他监测到该商品上架并且可以购买的瞬间点击立即购买下单
  • ¥15 神经网络怎么把隐含层变量融合到损失函数中?
  • ¥15 lingo18勾选global solver求解使用的算法
  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行