前言
前段时间看到这个《每个程序员半小时内必须解决的 5 个编程问题》,但是,并没有给出解决方案。今天我就带大家一起看看如何解决这 5 个编程问题。首先对于这 5 个编程问题,任何一门语言语言都可以( c , c ++, php , java , javascript ...),用你最熟悉的来解决即可。这里我就用 javascript 来实现一下这 5 个问题。
你真的会写代码吗?
对于求职者,用人单位首先希望的是你会写代码。我指的是真正的代码:我给你一个问题,你使用任何你觉得舒适的编程语言给出它的解决方案。
你真的能做到这一点吗?
策略:如果你不能在半小时以内解决以下 5 个问题,那么你首先要做的是重新审视自己。的确,或许你各方面的工作都干的不错,但是我依然觉得你现在还不配“软件工程师(或程序员,计算机科学专家,甚至是“开发人员”)”这个头衔。不要自欺欺人,先花点时间来调整你的重点吧。
5 个问题
1 . 使用 for 循环、 while 循环和递归写出 3 个函数来计算给定数列的总和。
//数列 var list = [1,2,3,4,5,6,7,8,9,10]; function for_imp(list) { var result = 0; for(var i = 0;i < list.length;i++) { result += list[i]; } return result; } console.log(for_imp(list));//输出 55
//数列 var list = [1,2,3,4,5,6,7,8,9,10]; function while_imp(list) { var i = 0,result = 0; while(i < list.length) { result += list[i]; i++ } return result; } console.log(while_imp(list));//输出 55
//数列 var list = [1,2,3,4,5,6,7,8,9,10]; function digui_imp(list,index) { if(index == 1) { return list[index-1]; } else { return digui_imp(list,index-1)+list[index-1]; } } console.log(digui_imp(list,list.length));//输出 55
2 . 编写一个交错合并列表元素的函数。例如:给定的两个列表为[ a , B , C ]和[ 1 , 2 , 3 ],函数返回[ a , 1 , B , 2 , C , 3 ]。
//数列 var list1 = [1,2,3,4,5],list2 = ['a','b','c','d','e']; function join_imp(list1,list2) { var result = []; var max_length = list1.length > list2.length ? list1.length:list2.length; var min_length = list1.length < list2.length ? list1.length:list2.length; for(var i = 0;i < max_length;i++) { if(i < min_length) result.push(list1[i],list2[i]); else if(i < list1.length) result.push(list1[i]); else result.push(list2[i]); } return result; } console.log(join_imp(list1,list2));//输出 [1, "a", 2, "b", 3, "c", 4, "d", 5, "e"]
3 . 编写一个计算前 100 位斐波那契数的函数。根据定义,斐波那契序列的前两位数字是 0 和 1 ,随后的每个数字是前两个数字的和。例如,前 10 位斐波那契数为: 0 , 1 , 1 , 2 , 3 , 5 , 8 , 13 , 21 , 34 。
function fibonacci(num) { //打印前100个数,循环一次打印一个 for(var i = 1;i <= num;i++) { //前两个数是 0 , 1 if(i <= 2) console.log(i-1); else { for(var num1 = 0,num2 = 1,j = 0;j < i-2;j++) { var temp = num1; num1 = num2; num2 = temp + num2; } console.log(num2); } } } fibonacci(100);//输出0,1,1,2,3,5,8,13,21,34,55,89,144,...,218922995834555200000
4 . 编写一个能将给定非负整数列表中的数字排列成最大数字的函数。例如,给定[ 50 , 2 , 1 , 9 ],最大数字为 95021 。
//数列 var data = [100,5,60,3]; function max_value(data) { data.sort().reverse();//按字符升序排序,反转 var result = 0; for(var i = 0;i < data.length;i++) { result = result*Math.pow(10,data[i].toString().length) + data[i]; } return result; } console.log(max_value(data));//输出6053100
5 . 编写一个在 1 , 2 ,…, 9 (顺序不能变)数字之间插入+或-或什么都不插入,使得计算结果总是 100 的程序,并输出所有的可能性。例如: 1 + 2 + 34 – 5 + 67 – 8 + 9 = 100 。
var data = [1,2,3,4,5,6,7,8,9]; var ope = new Array(8); for(ope[0] = 0;ope[0] < 3;ope[0]++) for(ope[1] = 0;ope[1] < 3;ope[1]++) for(ope[2] = 0;ope[2] < 3;ope[2]++) for(ope[3] = 0;ope[3] < 3;ope[3]++) for(ope[4] = 0;ope[4] < 3;ope[4]++) for(ope[5] = 0;ope[5] < 3;ope[5]++) for(ope[6] = 0;ope[6] < 3;ope[6]++) for(ope[7] = 0;ope[7] < 3;ope[7]++) { var str = ''; for(var i = 0;i < 8;i++)//拼接得到前8个数字+符号 { if(ope[i] == 0) str += data[i]+'+'; else if(ope[i] == 1) str += data[i]+'-'; else str += data[i]+''; } str += data[i]; if(eval(str) == 100) console.log(str);//输出这个表达式 } //输出 /* 1+2+3-4+5+6+78+9 1+2+34-5+67-8+9 1+23-4+5+6+78-9 1+23-4+56+7+8+9 12+3+4+5-6-7+89 12+3-4+5+67+8+9 12-3-4+5-6+7+89 123+4-5+67-89 123+45-67+8-9 123-4-5-6-7+8-9 123-45-67+89 */
如果你的编程基础还不错的话,应该可以轻松理解每个解决方案,或许你还有更好的解决方案。但如果你在看的过程中遇到问题了,那么你一定还需要提升自己!
小黄:提升自己?
小红:是的, absolutely !
小黄:为神马?月薪 2w +的我,生活美滋滋。
小红:为了更好的活下去!