每个程序员1小时内必须解决的5个编程问题--解答代码

来源:互联网 发布:windows 内存分析工具 编辑:程序博客网 时间:2024/06/08 12:10

先附题目:

每次我发布软件工程师的岗位工作要求,各种求职申请就会纷至沓来,接踵而至。但每每让我困惑的是,似乎总有那么几位应聘者完全不明白所谓“编程”的意思。

当然,他们另有想法。

而我认为,如果你应聘的是“Web前端开发”岗位,那么你只懂jQuery也可以胜任,那么,“软件工程师”是不是就意味着会HTML、JavaScript和CSS这些必备技能就行了呢?

(我觉得那些聊起XML、JSON、XSLT、SOAP、HTTP、REST、SSL和200多个首字母缩写词来头头是道,但却不会区分整型和浮点型数据类型的家伙很有意思。呵呵)

你真的会写代码吗?对于应聘程序员的求职人员,我,作为用人单位,首先希望的是你会写代码。我指的是真正的代码:我给你一个问题,你使用任何你觉得舒适的编程语言给出它的解决方案。

你真的能做到这一点吗?策略:如果你不能在1小时以内解决以下5个问题,那么你首先要做的是重新审视自己。的确,或许你各方面的工作都干的不错,但是我依然觉得你现在还不配“软件工程师(或程序员,计算机科学专家,甚至是“开发人员”)”这个头衔。不要自欺欺人,先花点时间来调整你的重点吧。

5个问题:

问题1

使用for循环、while循环和递归写出3个函数来计算给定数列的总和。

问题2

编写一个交错合并列表元素的函数。例如:给定的两个列表为[a,B,C]和[1,2,3],函数返回[a,1,B,2,C,3]。

问题3

编写一个计算前100位斐波那契数的函数。根据定义,斐波那契序列的前两位数字是0和1,随后的每个数字是前两个数字的和。例如,前10位斐波那契数为:0,1,1,2,3,5,8,13,21,34。

问题4

编写一个能将给定非负整数列表中的数字排列成最大数字的函数。例如,给定[50,2,1,9],最大数字为95021。

问题5

编写一个在1,2,…,9(顺序不能变)数字之间插入+或-或什么都不插入,使得计算结果总是100的程序,并输出所有的可能性。例如:1 + 2 + 34–5 + 67–8 + 9 = 100。

如果你能力超群,上面这些问题对你而言只是小菜一碟,1小时之内解决完全绰绰有余的话,请将我的慷慨陈词当作是在放屁。

不过,如果你觉得本文对你很有帮助的话,欢迎分享,并留下您宝贵的见解。Thank for reading。

英文原文:Five programming problems every Software Engineer should be able to solve in less than 1 hour


我的解答:

public class Test {static int i = 0;// question1: += and =+public static int Test1(int[] arr) {int sum = 0;for (int i = 0; i < arr.length; i++) {sum += arr[i];}System.out.println("for--" + sum);return sum;}public static int Test2(int[] arr) {int sum = 0;int i = 0;while (i < arr.length) {sum += arr[i];i++;}System.out.println("while--" + sum);return sum;}public static int Test3(int[] arr, int x) {int i = x;x = x < arr.length ? x + 1 : 0;if (x == 0) {return 0;}return arr[i] + Test3(arr, x);}// 问题二public static void Test4(char[] arr1, char[] arr2) {char arr[] = new char[arr1.length + arr2.length];for (int i = 0; i < arr.length; i++) {arr[i] = i % 2 == 0 ? arr1[i / 2] : arr2[i / 2];System.out.println(arr[i]);}return;}// 问题三public static void Test5(int m, int n) {System.out.print(m + " / ");i++;if (i == 100) {return;}Test5(n, m + n);return;}// 问题四 注意重新new一个数组public static void Test6(int[] arr) {int[] arr1 = new int[arr.length];for (int i = 0; i < arr.length; i++)arr1[i] = arr[i];for (int i = 0; i < arr1.length; i++) {while (arr1[i] / 10 > 0) {arr1[i] = arr1[i] / 10;}}for (int i = 0; i < arr1.length; i++) {int rec1 = arr1[i];int rec2 = arr[i];for (int j = i; j < arr.length; j++) {if (arr1[j] < arr1[i]) {arr1[i] = arr1[j];arr1[j] = rec1;arr[i] = arr[j];arr[j] = rec2;}}}for (int i = arr.length - 1; i >= 0; i--) {System.out.print(arr[i]);}return;}// 问题五public static void Test7() {String[] op = { "+", "-", "" };for (int a = 0; a < 3; a++)for (int b = 0; b < 3; b++)for (int c = 0; c < 3; c++)for (int d = 0; d < 3; d++)for (int e = 0; e < 3; e++)for (int f = 0; f < 3; f++)for (int g = 0; g < 3; g++)for (int h = 0; h < 3; h++) {String res = "1" + op[a] + "2" + op[b]+ "3" + op[c] + "4" + op[d]+ "5" + op[e] + "6" + op[f]+ "7" + op[g] + "8" + op[h]+ "9";_add(res);}return;}public static int _add(String s) {int sum = 0;char[] stringArr = ("+" + s + "#").toCharArray();String formula = "0";boolean operator = true;for (char a : stringArr) {if (a == '+') {sum = operator ? sum + Integer.valueOf(formula) : sum- Integer.valueOf(formula);formula = "";operator = true;continue;} else if (a == '-') {sum = operator ? sum + Integer.valueOf(formula) : sum- Integer.valueOf(formula);formula = "";operator = false;continue;} else if (a == '#') {sum = operator ? sum + Integer.valueOf(formula) : sum- Integer.valueOf(formula);break;}formula += a;}if (sum == 100)System.out.println(s);return 0;}public static void main(String[] arg) {int[] arr = { 2, 3, 4, 1, 5, 6200 };Test1(arr);Test2(arr);System.out.println("recursive--" + Test3(arr, 0));char[] arr1 = { 'a', 'b', 'c' };char[] arr2 = { '1', '2', '3' };Test4(arr1, arr2);Test5(0, 1);Test6(arr);Test7();}}

说点什么:

首先我承认我不是一个合格的程序员,我没有在一个小时内做出这五道题,尤其是第五题,花了我不少时间,代码仅供参考,欢迎大家指出错误,共同进步!


0 0
原创粉丝点击