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

2020-12-14 10:28:44 +08:00
 6167
有结果返回数列,无结果返回-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%
2487 次点击
所在节点    LeetCode
8 条回复
LewisHorse
2020-12-14 10:55:07 +08:00
判断无结果的条件是怎么写的?
6167
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
2020-12-14 14:45:18 +08:00
你直接判断 beg 是否是正整数就行了,(2*sum/num-num+1)为大于 0 的偶数
6167
2020-12-14 15:21:14 +08:00
@xsonglive491 这个有,只考虑这一项才通过 35%
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
2020-12-16 15:31:53 +08:00
很简单啊,beg = s/n - (n-1)/2
是大于等于 0 的整数就行
lidlesseye11
2020-12-16 18:28:01 +08:00
通过率是啥意思,测试 case 吗?那失败的 case 不给告诉的吗?
另外建议楼主直接放出自己写的原版整段代码。。你这连用的什么语言都不知道。
数学上是不难,可能是语言有什么特性哪里计算错了呢?
6167
2020-12-21 22:13:40 +08:00
@lidlesseye11

@LewisHorse

代码已附

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/735146

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX