新足迹

 找回密码
 注册

精华好帖回顾

· 分享一下我母亲髋关节置换手术的经历(布村) (2019-12-25) joy18 · 2018 波兰 沙特 巴林 说走就走 (全文完) (2020-5-10) patpatchow
· 前驱车、后驱车的特征探讨 (2011-8-6) 车友 · 好吃看得见--日本轻乳酪蛋糕 (2006-11-11) datou2z
Advertisement
Advertisement
查看: 6189|回复: 77

程序员面试题(所有语言) [复制链接]

特殊贡献奖章

发表于 2011-5-10 19:24 |显示全部楼层
此文章由 kr2000 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 kr2000 所有!转贴必须注明作者、出处和本声明,并保持内容完整
Write function which:
* loops 100 times
* keeps count using the variable "x"
* is a recursive function
* "x" initially equals 0
* "x" increments by 3 each loop
* prints "eek" for every 2nd loop
* prints "eep" for every 13th loop
* prints "yikes" on the 17th "eek"

最近面了几个,这个题目竟然出现了2次,发上来分享一下

评分

参与人数 2积分 +6 收起 理由
+ 2
o2h2o + 4 谢谢奉献

查看全部评分

Advertisement
Advertisement

发表于 2011-5-10 19:32 |显示全部楼层
此文章由 roo81 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 roo81 所有!转贴必须注明作者、出处和本声明,并保持内容完整
好难啊

特殊贡献奖章

发表于 2011-5-10 19:33 |显示全部楼层
此文章由 kr2000 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 kr2000 所有!转贴必须注明作者、出处和本声明,并保持内容完整
最多只有10-15分钟时间,因为还要做其他的题

2010年度奖章获得者

发表于 2011-5-10 21:35 |显示全部楼层
此文章由 dalaohu 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 dalaohu 所有!转贴必须注明作者、出处和本声明,并保持内容完整
seek 上有个130K得php dev, 加油啊!

这种提肯定是要你用delegate 写,会比叫漂亮点。 你找到好答案了公布一下吧,我们学习学习

2008年度奖章获得者

发表于 2011-5-10 21:44 |显示全部楼层
此文章由 degra 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 degra 所有!转贴必须注明作者、出处和本声明,并保持内容完整
貌似computer science 的tutorial question

2010年度奖章获得者

发表于 2011-5-10 21:47 |显示全部楼层
此文章由 dalaohu 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 dalaohu 所有!转贴必须注明作者、出处和本声明,并保持内容完整
估计就是那个tutor出得
Advertisement
Advertisement

2008年度奖章获得者

发表于 2011-5-10 22:05 |显示全部楼层
此文章由 degra 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 degra 所有!转贴必须注明作者、出处和本声明,并保持内容完整
上一个bash 的
  1. #!/bin/bash
  2. if [ $# -eq 0 ]; then
  3.         x=0
  4. else
  5.         x=$1
  6. fi
  7. x=$(($x + 3))

  8. if [ $(($x % 6)) -eq 0 ]; then
  9.         echo "eek"
  10. fi

  11. if [ $(($x % 39)) -eq 0 ]; then
  12.         echo "eep"
  13. fi

  14. if [ $(($x % 102)) -eq 0 ]; then
  15.         echo "yikes"
  16. fi
  17. if [ $x -ge 300 ]; then
  18.         exit
  19. fi
  20. $0 $x
复制代码

评分

参与人数 2积分 +7 收起 理由
kr2000 + 4 谢谢奉献
dalaohu + 3 你太有才了

查看全部评分

发表于 2011-5-10 23:04 |显示全部楼层

太好玩了,来个 C#...

此文章由 TuLaLa 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 TuLaLa 所有!转贴必须注明作者、出处和本声明,并保持内容完整
public static void Main(string[] args)
        {
            int x = 0;
            Loop(x);
            Console.ReadLine();
        }

        public static void Loop(int x)
        {
            // loop 100 times
            if (x == 300)
                return;

            // prints "eek" for every 2nd loop
           if (x % 2 == 0)
            {
                // prints "yikes" on the 17th "eek"
                if (x == 102)
                    Console.WriteLine("yikes");
                else
                    Console.WriteLine("eek");

            }
           // prints "eep" for every 13th loop
           else if (x % 39 == 0)
               Console.WriteLine("eep");
            
            x += 3;

            Loop(x);

        }

[ 本帖最后由 TuLaLa 于 2011-5-10 23:06 编辑 ]

评分

参与人数 1积分 +4 收起 理由
kr2000 + 4 谢谢奉献

查看全部评分

发表于 2011-5-11 00:08 |显示全部楼层
此文章由 本地人 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 本地人 所有!转贴必须注明作者、出处和本声明,并保持内容完整
@gandu,有个小错误:
if [ $(($x % 102)) -eq 0 ]; then
        echo "yikes"
fi

在这里不该用%,要不然yikes不但会出现在第17个eek,也会出现在第34个eek.

@TuLaLa,也有些小错误:
if (x % 2 == 0)
...
else if (x % 39 == 0)

这样第一次进去也会显示eek,你应该先做x+=3。还有不应该用else if,要不然在x == 78、156、234的情况下,就不会显示eep。

我的c++版:
  1. #include <iostream>

  2. using std::cout;
  3. using std::endl;

  4. const int INCREMENT = 3;
  5. const int EEK_ITERATION = 2 * INCREMENT;
  6. const int EEP_ITERATION = 13 * INCREMENT;
  7. const int YIKES_ITERATION = (EEK_ITERATION * 17);
  8. const int MAX_LOOP = (100 * INCREMENT);

  9. void theLoop( int x )
  10. {
  11.     x += INCREMENT;

  12.     if ( x % EEK_ITERATION == 0 )
  13.     {
  14.         cout << "eek" << endl;
  15.     }

  16.     if ( x % EEP_ITERATION == 0 )
  17.     {
  18.         cout << "eep" << endl;
  19.     }

  20.     if ( x == YIKES_ITERATION )
  21.     {
  22.         cout << "yikes" << endl;
  23.     }

  24.     if ( x < MAX_LOOP )
  25.     {
  26.         theLoop( x );
  27.     }
  28. }

  29. int main()
  30. {
  31.     theLoop( 0 );
  32.     return 0;
  33. }
复制代码

评分

参与人数 5积分 +15 收起 理由
kermit + 2 太给力了
o2h2o + 3 这个好看
atransformer + 2 真工整。

查看全部评分

头像被屏蔽

禁止发言

发表于 2011-5-11 09:04 |显示全部楼层
此文章由 linkspeed 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 linkspeed 所有!转贴必须注明作者、出处和本声明,并保持内容完整
最烦这种面试,还不如考智力题。

发表于 2011-5-11 09:15 |显示全部楼层
此文章由 pengruijun 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 pengruijun 所有!转贴必须注明作者、出处和本声明,并保持内容完整
这种题拿来 面试刚毕业的还行
Advertisement
Advertisement
头像被屏蔽

禁止访问

发表于 2011-5-11 09:42 |显示全部楼层

又次面试也考 recursive function

此文章由 atransformer 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 atransformer 所有!转贴必须注明作者、出处和本声明,并保持内容完整
觉得很无聊。  recursive function 逻辑上看似很牛。其实俺觉得执行效率不好。因为call function 是很费资源的。不如for loop. 请高手指教
头像被屏蔽

禁止访问

发表于 2011-5-11 09:54 |显示全部楼层
此文章由 atransformer 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 atransformer 所有!转贴必须注明作者、出处和本声明,并保持内容完整
使用递归解决问题,思路清晰,代码少。但是在主流高级语言中(如C语言、Pascal语言等)使用递归算法要耗用更多的栈空间,所以在堆栈尺寸受限制时(如嵌入式系统或者内核态编程),应避免采用。所有的递归算法都可以改写成与之等价的非递归算法。

http://zh.wikipedia.org/wiki/%E9%80%92%E5%BD%92_(%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%A7%91%E5%AD%A6)

特殊贡献奖章

发表于 2011-5-11 10:03 |显示全部楼层
此文章由 kr2000 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 kr2000 所有!转贴必须注明作者、出处和本声明,并保持内容完整
这几个都是senior的职位
我也搞不懂为什么senior也要考写代码,估计还是得考考基本功吧

我写的基本跟8楼一样,就是用了一个y=x/3+1;x==99不是102
9楼的我觉得很完美了,如果加上else的话,可能会快一点点

特殊贡献奖章

发表于 2011-5-11 10:08 |显示全部楼层
此文章由 kr2000 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 kr2000 所有!转贴必须注明作者、出处和本声明,并保持内容完整
这样的职位我只能仰视,几年后有100k我就满意了

老大,神马叫用delegate写

原帖由 dalaohu 于 2011-5-10 21:35 发表
seek 上有个130K得php dev, 加油啊!

这种提肯定是要你用delegate 写,会比叫漂亮点。 你找到好答案了公布一下吧,我们学习学习

退役斑竹

发表于 2011-5-11 10:08 |显示全部楼层
此文章由 大饼 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 大饼 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 atransformer 于 2011-5-11 09:54 发表
使用递归解决问题,思路清晰,代码少。但是在主流高级语言中(如C语言、Pascal语言等)使用递归算法要耗用更多的栈空间,所以在堆栈尺寸受限制时(如嵌入式系统或者内核态编程),应避免采用。所有的递归算法都可以改写成与之等价的 ...

的确如此。
这个会导致程序运行的时候堆栈的使用不可预测。
如果只有几K的ram空间,万一stack overflow就...
专攻电子电路
Advertisement
Advertisement

特殊贡献奖章

发表于 2011-5-11 10:09 |显示全部楼层
此文章由 kr2000 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 kr2000 所有!转贴必须注明作者、出处和本声明,并保持内容完整
recursive我也不喜欢,自己很少写,读起来也不容易

原帖由 atransformer 于 2011-5-11 09:54 发表
使用递归解决问题,思路清晰,代码少。但是在主流高级语言中(如C语言、Pascal语言等)使用递归算法要耗用更多的栈空间,所以在堆栈尺寸受限制时(如嵌入式系统或者内核态编程),应避免采用。所有的递归算法都可以改写成与之等价的 ...

发表于 2011-5-11 10:56 |显示全部楼层
此文章由 xxmplus 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 xxmplus 所有!转贴必须注明作者、出处和本声明,并保持内容完整
#!/bin/python3

def loopme(x, n, step):
    if x <= step*n:
        if x % (step*2) == 0 and x >= (step*2): print('eek')
        if x % (step*13) == 0 and x >= (step*13): print('eep')
        if x % (step*17*2) == 0 and x // (step*17*2) == 1: print('yikes')
        loopme(x+step, n, step)

if __name__ == '__main__':
    loopme(0, 100, 3)

评分

参与人数 1积分 +4 收起 理由
kr2000 + 4 谢谢奉献

查看全部评分

发表于 2011-5-11 11:02 |显示全部楼层
此文章由 本地人 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 本地人 所有!转贴必须注明作者、出处和本声明,并保持内容完整
因为call function 是很费资源的

在大部分情况下,这根本不是问题(你想一想一个1Ghz的处理器一秒钟能运行几千万个call function),而且有的algorithms(比如quicksort),要是用非递归的算法来解决,就更费资源。所以,关键是你得根据你程序的实际情况,考虑所有的因素,再profile一下,然后做最后的决定。

那么,为什么递归的面试题是好的呢?关键在于递归是比较难懂,不是所有的程序员都能掌握好。虽然懂递归的程序员不一定是好的程序员,但不懂递归的肯定不是最好的。

评分

参与人数 1积分 +3 收起 理由
bffbffbff + 3 我很赞同

查看全部评分

发表于 2011-5-11 11:06 |显示全部楼层
此文章由 本地人 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 本地人 所有!转贴必须注明作者、出处和本声明,并保持内容完整
9楼的我觉得很完美了,如果加上else的话,可能会快一点点

在哪里加个else?加个else逻辑好像不对吧……

特殊贡献奖章

发表于 2011-5-11 11:20 |显示全部楼层
此文章由 kr2000 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 kr2000 所有!转贴必须注明作者、出处和本声明,并保持内容完整
是啊,我看错了,你是对的
我跟8楼范了同样的错误
看帖不仔细

原帖由 本地人 于 2011-5-11 11:06 发表

在哪里加个else?加个else逻辑好像不对吧……
Advertisement
Advertisement
头像被屏蔽

禁止访问

发表于 2011-5-11 11:26 |显示全部楼层
此文章由 atransformer 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 atransformer 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 本地人 于 2011-5-11 11:02 发表

在大部分情况下,这根本不是问题(你想一想一个1Ghz的处理器一秒钟能运行几千万个call function),而且有的algorithms(比如quicksort),要是用非递归的算法来解决,就更费资源。所以,关键是你得根据你程序的实际情况,考虑所有的因 ...


现在的电脑,资源确实不是问题。 关键是绝大多说情况下不需要用这个。 没事写个低轨function的人,属于爱显摆,并不对程序本身带来啥好处。

发表于 2011-5-11 11:39 |显示全部楼层
此文章由 TuLaLa 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 TuLaLa 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 kr2000 于 2011-5-11 11:20 发表
是啊,我看错了,你是对的
我跟8楼范了同样的错误
看帖不仔细


你不提我还真没注意...I thought it's either "yikes" or "eek" but not both...blame on the ambigous requirement

发表于 2011-5-11 11:40 |显示全部楼层

回复 xxmplus 18# 帖子

此文章由 本地人 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 本地人 所有!转贴必须注明作者、出处和本声明,并保持内容完整
@xxmplus,这个答案好像也有问题:
第一次:x == 0, nothing is printed
次:x == 3, nothing is printed
次:x == 6, eek is printed

发表于 2011-5-11 11:42 |显示全部楼层
此文章由 xxmplus 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 xxmplus 所有!转贴必须注明作者、出处和本声明,并保持内容完整
看了一下,我写的和本地人写的没啥两样,就是一回事

发表于 2011-5-11 11:47 |显示全部楼层
此文章由 TuLaLa 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 TuLaLa 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 本地人 于 2011-5-11 11:02 发表

...那么,为什么递归的面试题是好的呢?关键在于递归是比较难懂,不是所有的程序员都能掌握好。虽然懂递归的程序员不一定是好的程序员,但不懂递归的肯定不是最好的。


Agree with this. 这样的面试题基本上没有什么实际意义,只是来考察程序员懂不懂递归的。
Advertisement
Advertisement

发表于 2011-5-11 11:47 |显示全部楼层
此文章由 本地人 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 本地人 所有!转贴必须注明作者、出处和本声明,并保持内容完整
再仔细看一下。关键在于什么时候加3。我是%前加的,你是%后加的。结果 不一样。

发表于 2011-5-11 11:48 |显示全部楼层

回复 本地人 24# 帖子

此文章由 xxmplus 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 xxmplus 所有!转贴必须注明作者、出处和本声明,并保持内容完整
把我的输出和你的diff了一下,一样的啊

x == 0 和 x == 3 的时候就是应该什么都不输出吧
x == 6 就是2nd loop咯,不打印eek打印什么

发表于 2011-5-11 11:50 |显示全部楼层

回复 本地人 27# 帖子

此文章由 xxmplus 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 xxmplus 所有!转贴必须注明作者、出处和本声明,并保持内容完整
你再仔细看看,一样的

硬要抠细节的话,你比我少递归一次吧

[ 本帖最后由 xxmplus 于 2011-5-11 11:51 编辑 ]

发表于 2011-5-11 11:52 |显示全部楼层
此文章由 TuLaLa 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 TuLaLa 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 本地人 于 2011-5-11 00:08 发表
@TuLaLa,也有些小错误:

这样第一次进去也会显示eek,你应该先做x+=3。还有不应该用else if,要不然在x == 78、156、234的情 ...

Yeah you are right. Did the whole thing in a rush didn't think thoroughly...

发表回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Advertisement
Advertisement
返回顶部