Python每日一练:
题目描述
题目描述
数学老师给小明出了一道等差数列求和的题目。但是粗心的小明忘记了一 部分的数列,只记得其中 N 个整数。
现在给出这 N 个整数,小明想知道包含这 N 个整数的最短的等差数列有几项?
输入描述
输入的第一行包含一个整数 N。
第二行包含 NN 个整数 A_1,A_2,··· ,A_N。(注意 A_1∼ A_N不一定是按等差数列中的顺序给出)其中2≤N。
输出描述
输出一个整数表示答案。
输入输出样例
示例
输入
5
2 6 4 10 20
输出
10
样例说明: 包含 2、6、4、10、20 的最短的等差数列是 2、4、6、8、10、12、14、16、 18、20。
运行限制
最大运行时间:1s
最大运行内存: 256M
解题思路
- 首先这道题让我们求最短的等差数列,我们就可以把两两之间最小的差值作为公差来计算;
- 输入我们还是选择最原始的列表输入多个元素的方法:
b = list(map(int,input().split()))
- 将列表通过集合进行去重处理,防止得到的差值是零:
b = list(set(b))
- 设置一个最大的数值
value = math.inf
,使之每次如果两数相减有结果就是value等于那个值,一直得到最小的差值value; - 此时注意本题最大的一个坑,就是公差为零时,最短的数列就是我们输入的数据个数! 其余情况只需要让最大的元素减最小的元素,得到的差值除以我们之前得到的最小的差值就ok啦
if l == 1: n = a else: n = (b[-1]-b[0])/value +1
源码分享
import os
import sys
import math
# 请在此输入您的代码
a = int(input())
b = list(map(int,input().split()))
# 将列表通过集合进行去重处理,防止得到的差值是零。
b = list(set(b))
b.sort()
l = len(b)
# 设置一个最大的数值,使之每次如果两数相减有结果就是value等于那个值,一直得到最小的差值value;
value = math.inf
for i in range(l-1):
minvalue = b[i+1]-b[i]
if minvalue < value :
value = minvalue
# 此时注意本题最大的一个坑,就是公差为零时,最短的数列就是我们输入的数据个数!
if l == 1:
n = a
else:
n = (b[-1]-b[0])/value +1
print(int(n))
学习总结
1.value = math.inf表示value取到无限大实数
2. 将列表通过集合进行去重处理:b = list(set(b))
3. 要注意公差为0的时候数列也是存在的!此时列表中的元素就是最短的长度,不可以进行去重。
🏆往期文章----好文推荐🏆
🥇 [Python公开课]零基础玩转Python基础篇----第一节:Python的自我介绍
🥈 [Python公开课]零基础玩转Python进阶篇----第一节:Python中的文件操作
🥉 快来一场一场刷题狂欢的party吧!----【Python训练营】
🌲🌲🌲 好啦,这就是今天要分享给大家的全部内容了
❤️❤️❤️如果你喜欢的话,就不要吝惜你的一键三连了~