某涉密单位下发了某种票据,并要在年终全部收回。每张票据有唯一的 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
该回答引用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 了。
该回答引用ChatGPT
在给定的代码中,虽然已经对输入的数据进行了处理,但是还没有求出重号的 ID。因此,可以在排序后的数组中查找重号的 ID。
具体来说,可以通过扫描整个数组来查找相邻的两个元素是否相等,如果相等,则表示出现了重号的情况。此时,记录下这个重号的 ID,同时将这个 ID 从数组中删除,以避免影响到断号的查找。
修改后的代码如下所示:
N = int(input())
b = []
for i in range(N):
num = input().split()
for j in range(len(num)):
b.append(int(num[j]))
b.sort()
m = 0
n = 0
for i in range(len(b) - 1):
if b[i] == b[i + 1]:
n = b[i]
del b[i]
break
for i in range(len(b)):
if b[i] != b[0] + i:
m = b[0] + i
break
print(m, n)
在这段代码中,我们首先对输入的数据进行处理,将所有的 ID 存储到数组 b 中,并对其进行排序。然后,我们扫描整个数组,查找相邻的两个元素是否相等,如果相等,则表示出现了重号的情况。此时,记录下这个重号的 ID,并将这个 ID 从数组中删除。接着,我们再次扫描整个数组,查找断号的 ID 并记录下来。最后,输出断号的 ID 和重号的 ID。
n的值没有变过,所以最终还是0。n应该指的是重复的数字,可以使用机器人的代码里集合去重后相减的做法。
但是你的代码和上面机器人的代码都有个缺陷,那就是如果重复的数字出现在断号的数字之前,比如,1,2,2,3,4,6,7,8,应该输出5 2,机器人的代码会输出3 2。断号并不正确。
可以先去重,再排序,再使用你的方法找到断号。代码如下:
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]))
unique_b = sorted(set(b))
n = sum(b) - sum(unique_b)
for i in range(len(unique_b)):
if unique_b[i] != unique_b[0] + i:
m = unique_b[0] + i
break
print(m,n)
不知道你这个问题是否已经解决, 如果还没有解决的话: