V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
6167
V2EX  ›  LeetCode

华为 OD 机试题:给定两个数 0<S, N<100000, S 为数列总和, N 为数列长度,求连续正整数列

  •  
  •   6167 · 2020-12-14 10:28:44 +08:00 · 2482 次点击
    这是一个创建于 1445 天前的主题,其中的信息可能已经有所发展或是发生改变。
    有结果返回数列,无结果返回-1
    输入 525 6
    返回 85 86 87 88 89 90

    输入 3 5
    返回 -1

    题目倒是不难
    根据 (beg +end) *num/2 = sum
    倒推 beg= (2*sum/num-num+1)/2
    但是这种题怎么算才能满足 100%通过率?
    最高才 45%
    第 1 条附言  ·  2020-12-21 22:12:19 +08:00
    import sys
    
    def func1(sum, num):
        if sum > 0 & num > 0 & int(sum) == sum & int(num) == num:
            beg = (sum * 2 / num - num + 1) / 2
            if beg % 1 == 0 & beg != 0:
                return [i for i in range(int(beg), int(beg) + num)]
            else:
                return -1
        else:
            return -1
    
    for line in sys.stdin:
        a = line.split()
        if len(a) != 2:
            print(-1)
        sum, num = a[0], a[1]
        if type(int(sum)) == type(int(num)) == type(1):
            print(func1(int(sum), int(num)))
        else:
            print(-1)
    
    8 条回复    2020-12-21 22:13:40 +08:00
    LewisHorse
        1
    LewisHorse  
       2020-12-14 10:55:07 +08:00 via Android
    判断无结果的条件是怎么写的?
    6167
        2
    6167  
    OP
       2020-12-14 11:08:36 +08:00
    @LewisHorse
    if sum>0 & num<0 & sum == int(sum) & num == int(num):
    return ......
    else:
    return -1
    xsonglive491
        3
    xsonglive491  
       2020-12-14 14:45:18 +08:00
    你直接判断 beg 是否是正整数就行了,(2*sum/num-num+1)为大于 0 的偶数
    6167
        4
    6167  
    OP
       2020-12-14 15:21:14 +08:00
    @xsonglive491 这个有,只考虑这一项才通过 35%
    xsonglive491
        5
    xsonglive491  
       2020-12-14 18:13:59 +08:00
    @6167 num <=0 or num*num > 2* sum or (2*sum/num-num+1) %2 !=0 :return -1
    zhucegeqiu
        6
    zhucegeqiu  
       2020-12-16 15:31:53 +08:00
    很简单啊,beg = s/n - (n-1)/2
    是大于等于 0 的整数就行
    lidlesseye11
        7
    lidlesseye11  
       2020-12-16 18:28:01 +08:00
    通过率是啥意思,测试 case 吗?那失败的 case 不给告诉的吗?
    另外建议楼主直接放出自己写的原版整段代码。。你这连用的什么语言都不知道。
    数学上是不难,可能是语言有什么特性哪里计算错了呢?
    6167
        8
    6167  
    OP
       2020-12-21 22:13:40 +08:00
    @lidlesseye11

    @LewisHorse

    代码已附
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5404 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 07:55 · PVG 15:55 · LAX 23:55 · JFK 02:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.