2014年七月华为校招机试题目--最难的一道, 呵呵!
2015-05-22 20:47
225 查看
今天百无聊赖之时, 漫心看到14年的华为校招机试题目, 一共三道, 前两道皆是平平, 第三道却柳暗花明, 让人眼前一亮。 咋一看, 饶有趣味, 看似平淡无奇, 然而却玄机颇深(对我这种弱渣而言)。(不过对于ACMer, 好像应该用基础算法, 就能解决!)
(然而我也只会基础的算法!!忏愧的紧!!!)。如果有幸被大神看到, 能指点我一两招, 不胜感激! 下面是题目和我的详细题解思路(可供巨巨一笑!嘿嘿!)。
2014年七月华为校招机试题目:
第三题:
输入一个正整数X,在下面的等式左边的数字之间添加+号或者-号,使得等式成立。
1 2 3 4 5 6 7 8 9 = X
比如:
12-34+5-67+89 = 5
1+23+4-5+6-7-8-9 = 5
请编写程序,统计满足输入整数的所有整数个数。
输入: 正整数,等式右边的数字
输出: 使该等式成立的个数
样例输入:5
样例输出:21
我的详细解题思路
这个题目看似简单, 却又各种细节情况需要考虑。 (可能是由于博主太菜, 暂时无法想出巧妙或高级的算法----本人大一, 路漫漫其修远兮!) 。 对待这个问题, 先是要求出, 共分成了几个数(最多9个, 最少1个)。 假设我们都把它分成9 个数,用数组num【】把它们存起来, 当然 如果这个数较靠后, 没分到数, 则对应 num【i】 = 0, 并且num【i+1】也一定为0;。 好啦!现在假设我们已找到了这个数组num的9 个值。 怎么求出这9个数(当然9个数里面大都是有0的)如何进行加减才能的到目标值呢? 当然我这种弱渣的笨方法是枚举出所有结果 进行一个一个的和目的值 x 进行比对。如何枚举出所有结果呢?因为只有两种运算符, 自然地想到二叉树,(可以定义向左为减,则向右为加) 令第一个数为 根节点 , 叶子即为枚举值。 树深的确定与num【i】的值有关, 例如 num【7】 != 0, num【8】 = 0; 则树深为7 。
对于上面的如何把1-9 分为九个数的问题, 博主实在太弱, 没有巧妙简洁地分法(即枚举), 只能用 9 个循环 去分。 不过所幸每层循环都在递减, 最大的为 9 。 所以时间复杂度并不高, 耗时并不太大。 然而对此问题我的代码竟然写了80多行, 实在不能容忍!。(相信你们也不会有兴趣看我的渣代码)。 等博主功力提升, 再用高效(精简)代码狂破此题!(我一直感觉此题有较好的算法可破)。 对于此题, 博主自我感觉自己弱爆啦!(其实是“爆了还弱”--弱爆了还继续弱!!!)。 但是博主不能容忍贴出又烂又长的代码! 敬请见谅。
(然而我也只会基础的算法!!忏愧的紧!!!)。如果有幸被大神看到, 能指点我一两招, 不胜感激! 下面是题目和我的详细题解思路(可供巨巨一笑!嘿嘿!)。
2014年七月华为校招机试题目:
第三题:
输入一个正整数X,在下面的等式左边的数字之间添加+号或者-号,使得等式成立。
1 2 3 4 5 6 7 8 9 = X
比如:
12-34+5-67+89 = 5
1+23+4-5+6-7-8-9 = 5
请编写程序,统计满足输入整数的所有整数个数。
输入: 正整数,等式右边的数字
输出: 使该等式成立的个数
样例输入:5
样例输出:21
我的详细解题思路
这个题目看似简单, 却又各种细节情况需要考虑。 (可能是由于博主太菜, 暂时无法想出巧妙或高级的算法----本人大一, 路漫漫其修远兮!) 。 对待这个问题, 先是要求出, 共分成了几个数(最多9个, 最少1个)。 假设我们都把它分成9 个数,用数组num【】把它们存起来, 当然 如果这个数较靠后, 没分到数, 则对应 num【i】 = 0, 并且num【i+1】也一定为0;。 好啦!现在假设我们已找到了这个数组num的9 个值。 怎么求出这9个数(当然9个数里面大都是有0的)如何进行加减才能的到目标值呢? 当然我这种弱渣的笨方法是枚举出所有结果 进行一个一个的和目的值 x 进行比对。如何枚举出所有结果呢?因为只有两种运算符, 自然地想到二叉树,(可以定义向左为减,则向右为加) 令第一个数为 根节点 , 叶子即为枚举值。 树深的确定与num【i】的值有关, 例如 num【7】 != 0, num【8】 = 0; 则树深为7 。
对于上面的如何把1-9 分为九个数的问题, 博主实在太弱, 没有巧妙简洁地分法(即枚举), 只能用 9 个循环 去分。 不过所幸每层循环都在递减, 最大的为 9 。 所以时间复杂度并不高, 耗时并不太大。 然而对此问题我的代码竟然写了80多行, 实在不能容忍!。(相信你们也不会有兴趣看我的渣代码)。 等博主功力提升, 再用高效(精简)代码狂破此题!(我一直感觉此题有较好的算法可破)。 对于此题, 博主自我感觉自己弱爆啦!(其实是“爆了还弱”--弱爆了还继续弱!!!)。 但是博主不能容忍贴出又烂又长的代码! 敬请见谅。
相关文章推荐
- 2014 华为校招机试题(c/c++开发类)
- 小试身手__一道华为机试题
- 2016年华为校招机试题
- 华为的一道机试题及答案(压缩字符串)
- 华为2012秋季校招机试题-选秀节目打分(题目来自网络)
- 华为2013校招之哈工大威海 上机试题之一:报数问题:设有N 个人围坐一圈并按顺时针方向从1 到N 编号,从第S个人开始进行1 到M报数,报 数到第 M个人时,此人出圈,再从他的下一个人重新开始1 到 M的报数,如此进行下去直 到所有的人都出圈为止。现要打印出出圈次序。
- 一道腾讯校招试题
- 一道华为机试题-销售点撤销方案数
- 华为2012秋季校招机试题-数组处理(题目源自网络)
- 2015华为校招机试题
- 华为2014校招机试题
- 华为2012秋季校招机试题-数组奇偶交叉重组(题目源自网络)
- 华为校招上机笔试试题(A卷)——java实现
- 标题华为2016校招机试题(2015年9月) 海大上午场(包含实现代码,运行环境为vc)
- 华为2015提前批校招——机试题
- 一道来自华为的C机试题目
- 华为2016校招机试题(2015年9月) 海大上午场(包含实现代码,运行环境为VS2010)
- 华为2016校招 机试题
- 华为的一道机试题,单词倒序
- 华为一道机试题-操作系统任务调度问题