1. 题目详情
题目链接:“蓝桥杯”练习系统
2. 解题思路
等差数列的性质:a(n+1) - a(n) = d
a(n+1) 表示等差数列的第n+1项,a(n) 表示等差数列的第n项,d为公差。
题目给出N个数 ,但它们不一定是连续的等差数列的项,中间可能有遗漏。因此:
1)将N个数进行排序
2)求出相邻两个数的差值,并进行记录下最小的差值,改值即为最大的公差
3)用最大值减去最小值,再除以最小差值,因为要求个数,所以最后结果还需要加上1
例:等比数列:3,6,9 公差:3
个数 = (9-6)/ 3 +1 = 3个
3. 代码实现
n = int(input())
a = list(map(int,input().split()))
a.sort() # 排序
b = []
for i in range(1,len(a)):
b.append(a[i]-a[i-1]) # 求相邻两项的差值
cha = min(b) # 记录下最小的差值
if cha==0: # 如果最小的差值为0,那个改数列为常数列,如:1 1 1 1
print(n)
else:
res = (a[-1]-a[0])//cha+1 # 用最大值减去最小值再除以最小差值,最后+1
print(res)