思路:(以样例为例)
1)排序:
2 4 6 10 20
2)算出两两之间的差并排序:
2 2 4 10
3)求出以上数字的最大公约数:
2
即为等差数列的公差
4)用(最大值-最小值)/公差 + 1 即为所得
(20-2)/2 + 1 = 10
完整代码:
def gcd(a,b):
if a>b:
a,b=b,a
for i in range(2,a+1):
if a%i==0 and b%i==0:
return i
return 1
def list_gcd(slist):
lens=len(slist)
for i in range(1,lens):
slist[i-1],slist[i]=0,gcd(slist[i-1],slist[i])
gcds='{}'.format(slist[lens-1])
gcds=int(gcds)
return gcds
def main():
input()
lists=list(map(int,input().split()))
lists.sort()
maxs=max(lists)
mins=min(lists)
slist=[] #差
for i in range(1,len(lists)):
slist.append(lists[i]-lists[i-1])
lcms=list_gcd(slist)
print(int((maxs-mins)/lcms+1))
main()
程序运行结果: