YanTianFeng的知识库

Want Coding

Want Reading

文章 89

访问 20141

评论 2

头像

YanTianFeng

发私信

文章 89
访问 20141
评论 2
FIGHT-WITH-HR
返回顶部

Knowledge  每个程序员半小时内必须解决的5个编程问题

标签   HR   技术  

  ( 189 )       ( 0 )


前言

前段时间看到这个《每个程序员半小时内必须解决的 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 +的我,生活美滋滋

小红:为了更好的活下去!