(每日一练72087)题目名称:等差数列

文盲老顾
WEB应用领新星创作者
博客专家认证
2023-06-15 11:12:33

给定一已排序的正整数组成的数组,求需要在中间至少插入多少个数才能将其补全成为一等差数列。 “在中间插入”的意思是:不能在第一个数之前,或最后一个数之后插入数。

嗯,有一个同名的题目,编号是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 位置继续弄一下,结果。。。。就这?

...全文
189 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
m0_64640506 2023-06-15
  • 打赏
  • 举报
回复

学会了,感谢博主

CSDN-Ada助手 2023-06-15
  • 打赏
  • 举报
回复
您的问题已经帮您同步至问答, 链接: https://ask.csdn.net/questions/7964705, 请您保持关注, 如果回答有帮助解决此问题, 麻烦您动动小手给相关的回答点赞, Ada会在评论区为您更新结题状态

321

社区成员

发帖
与我相关
我的任务
社区描述
主要用于技术交流,包括但不限于 .net,mssql,js,css,python,算法,运维。也可以晒最新技术,美图,运动等。最后,如果有问题,可以提问,老顾能帮忙的会尽量帮忙哦。
前端sqlserverasp.net 技术论坛(原bbs) 北京·西城区
社区管理员
  • 文盲老顾
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧