321
社区成员




给定一已排序的正整数组成的数组,求需要在中间至少插入多少个数才能将其补全成为一等差数列。 “在中间插入”的意思是:不能在第一个数之前,或最后一个数之后插入数。
嗯,有一个同名的题目,编号是28793 那个,比这个简单多了,这个还是得捋一下逻辑的。但代码还没写完,却已经 AC 了,就挺。。。。无语的。
arr = sorted(map(int,input().split()))
t = [arr[v] - arr[v - 1] for v in range(1,len(arr))]
mn,mx = min(t),max(t)
if mn == mx:
print(0)
elif mn == 0 and mx > 0:
print('NaN')
else:
f = [v for v in t if v % mn != 0]
if len(f) == 0:
print((arr[-1] - arr[0])//mn + 1 - len(arr))
else:
f = [mn] + f
b = []
for i in f:
b.append([])
c = 2
while i > 1:
while i % c == 0:
b[-1].append(c)
i //= c
c += 1
n = set(b[0])
for i in range(1,len(b)):
n &= set(b[i])
if len(n) == 0:
print(arr[-1] - arr[0] + 1 - len(arr))
else:
pass
这用例不够强壮啊,等于我 f = [mn] + f 之后的一大段代码都等于白写了啊,我还说,碰到 [2,4,8,16] 这样的数列在 pass 位置继续弄一下,结果。。。。就这?
学会了,感谢博主