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日

悬赏问题

  • ¥15 网络设备配置与管理这个该怎么弄
  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器