2017 携程 笔试编程题 1
来源:互联网 发布:linux服务器绑定域名 编辑:程序博客网 时间:2024/05/31 19:15
- 前言
- 正文
- 题目要求
- 思路
- n10
- n 18
- 核心
- 测试
- 总结
前言
今天参加了携程的笔试,编程题第一题一开始想错了方向,花费了很多时间(虽然第二题就是给时间也不一定做得出来,(⊙﹏⊙)b)。
下面记录一下这个小插曲。
正文
题目要求
将指定的正整数n分解成若干个互不相同的自然数的和,且使这些自然数的乘积最大
人家给了个输入输出的例子,如下:
输入15
输出 144
言下之意就是在自然数之和为15的这些数字中,乘积最大的一对是
2 3 4 6
思路
为了使得这些自然数之和的乘积最大,那么这些数字应该尽可能的接近。
下面举几个小例子:
n=10
2+3+4 = 9// 剩下的那个1补到4上面2+3+5
这个时候最大的乘积变成了30
n = 18
2+3+4+5 = 14//按照刚才的思路, 剩下的4 添加到5上面2+3+4+9
此时最大的乘积结果为216
那么这时的结果是最大的吗?
答案是否定的,因为刚才是从下标为2开始的。如果下标从3,从4开始呢,我们来看下效果。
3+4+5+6 -->> 最大结果为:360
4+5+6+7>18则进行去尾加和4+5+9 -->> 最大结果为: 180
剩下的其实就不用考虑了。
核心
经过刚才的铺垫,这下不难理解了。最笨的方法就是不断的递增下标,然后记录每一个下标对应的最大值。存储起来,然后找到这些最大值中最大的那个,就是我们要求的结果了。
代码如下:
def mutl(ls): result = 1 for item in ls: result *= item return resultdef compute(n, step): path = [] cursum = 0 for index in range(step, n): if cursum > n: last = path.pop() path.append(path.pop() + n - (cursum - last)) break path.append(index) cursum += index return mutl(path)def my(n): total = [] maxvalue = 0 for step in range(int(n/2)): item = compute(n, step) total.append(item) maxvalue = max(total) return maxvaluen = 15result= my(n)print(result)
运行结果:
144
测试
再来多测几组数据。
- n=10
30
- n=18
360
这下,可以啦。需要注意的是:
递增下标到n的一半的位置就可以了,否则结果会不正确,这是因为计算每次的step的时候会把第一个给算进去,所以导致结果偏大。
总结
就携程的笔试题而言,前面部分的问答题和选择题还算是中规中矩,比较偏重于理论和实践。
编程题就真的是考验算法的了。大部分的笔试题都是动态规划类型的。我本人比较偏重于开发方向,所以参加这种笔试题真的是有点力不从心。
不管怎么说,算法是很有必要的。多学点,肯定没错,说不一定以后就用得到了。
我, 还有很长的路要走啊。
2 0
- 2017 携程 笔试编程题 1
- 搜狐2017笔试编程题
- 京东2017笔试编程题
- 京东2017笔试编程题
- 阿里2017编程笔试题
- 2017年秋招京东笔试编程题
- 笔试编程题-2017电信
- 经典编程笔试题1
- 新浪笔试编程题1
- 网易笔试编程题1
- 笔试实践1---2017年网易在线笔试之编程题
- 2017网易有道内推笔试编程题1:洗牌
- 2017年京东校招Java研发笔试编程第1题
- 腾讯2017暑假实习生招聘笔试编程题(1)
- 2017年网易内推笔试编程题1
- 2017年腾讯实习生在线笔试编程题(1)
- 乐视2017暑期实习生笔试编程题
- 2017 京东 笔试 编程题 解题 爬山
- Python+Selenium练习篇之28-处理iframe切换
- 每个java初学者都应该搞懂的问题
- 三、Spring Boot构建RESTful API
- [CF407E]k-d-sequence
- TCP和UDP
- 2017 携程 笔试编程题 1
- 机器学习的两类参数
- leetcode [Happy Number]//待整理多种解法
- 九度OJ题目1101:计算表达式
- Faster R-cnn和Cudnn5.0冲突解决过程记录
- ZOJ3953 Intervals 【贪心 双线程活动分配问题】
- 用 <button> , <input type="button"> , <input type="submit"> 提交表单的异同
- 当年第一个Java作品,Java坦克大战,写于2016年2月9日,放着给初学者~
- mysql首次登陆随机密码