zoukankan      html  css  js  c++  java
  • 程序员面试题-火柴棍式-火车运煤

    程序员面试题-
     
    1. “火柴棍式”
    http://coolshell.cn/articles/3961.html
    2011年3月21日陈皓
     
    有时候,有些面试题是很是无厘头,这不,又有一个,还记得小时候玩的的“火柴棍游戏”吗,就是移动一根火柴棍改变一个图或字的游戏。程序面试居然也可以这么玩,看看下面这个火柴棍式的程序面试题吧。
     
    下面是一个C程序,其想要输出20个减号,不过,粗心的程序员把代码写错了,你需要把下面的代码修改正确,不过,你只能增加或是修改其中的一个字符,请你给出三种答案。
    int n = 20;
    for(int i = 0; i < n; i--){
        printf("-");
    }
     
    不要以为这题不是很难,我相信你并不那么容易能找到3种方法。我觉得,如果你能在10分钟内找出这三种方法,说明你真的很聪明,而且反应很快。当然,15分钟内也不赖。不过,你要是30分钟内找不到三种方法,当然,不说明你笨了,最多就是你的反应还不够快。嘿嘿。就当是玩玩吧。
     
    下面是我的答案:
     
    //第一种解法:在for循环中给n加一个负号
    for(int i = 0; i < -n; i--)
    //第二种解法:把 n 初始化成 -20
    int n = -20; 
    //第三种解法:把for循环中的 i 初始化成40
    for(int i = 40; i < n; i--)
     
    不过,我要告诉你,以上这些答案都不对(我就知道你会偷看答案的),不过,顺着这些思路走很接近了。呵呵。
     
     
     
    下面是正确答案——
     
    //第一种解法:在for循环中给 i 加一个负号
    for(int i = 0; -i < n; i--) 
    //第二种解法:在for循环中把 i-- 变成 n--
    for(int i = 0; i < n; n--) 
    //第三种解法:把for循环中的 < 变成 +
    for(int i = 0; i + n; i--)
     
    其它相关的变种题如下:
    通过修改、增加一个字符,让其输出21个减号
    通过修改、增加一个字符,让其只输出1个减号
    通过修改、增加一个字符,让其不输出减号
     
     
    2. 火车运煤
     
    这个可能是一个比较经典的智力题了,和以前的那个《赛马问题》很相似,其题目如下:
     
    你是山西的一个煤老板,你在矿区开采了有3000吨煤需要运送到市场上去卖,从你的矿区到市场有1000公里,你手里有一列烧煤的火车,这个火车最多只能装1000吨煤,且其能耗比较大——每一公里需要耗一吨煤。请问,作为一个懂编程的煤老板的你,你会怎么运送才能运最多的煤到集市?
     
    这道题一开始看上去好像是无解的,因为你的火车每一公里就要消耗一吨煤,而到目的地有1000公里,而火车最多只能装1000吨媒。如果你的火车可以全部装下,到目的地也会被全部烧光,一丁点也不剩。所以,很多人的第一反应都是觉得这个不太可能。
     
    如果你一开始就觉得不太可能的话,这是很正常的。不过我不知道你还会不会继续思考下去,如果你不想思考下去了,那么我很为你担忧,因为你可能并不是一个不善于思考的人,而是一个畏难的人,还有可能是一个容易放弃的人。这对于你做好一个需要大量思考的工作的程序员来说可能并不适合。
     
    我一开始也觉得不可能,后来想了一想,想到一个解法可以最多运送500吨煤到市场,方法如下:(希望你先自己想一想再查看这个答案)
     
     
    【查看答案】
     
    装1000吨煤,走250公里,扔下500吨煤,回矿山。
    装1000吨煤,走到250公里处,拿起250吨煤继续向前到500公里处,扔下500吨煤,回矿山。此时火车上还有250吨,再加上在250公里处还有250吨煤,所以,火车是可以回矿山的。
    装上最后1000吨煤,走到500公里处,装上那里的500吨煤,然后一直走到目的。
    于是,你最多可以运送500吨煤到市场(当然,火车也回不去了,因为那矿山没有煤了)
     
    好像这样很不错的了,不过还有更好的方法能运更多的媒过去。你知道这个方法吗?可以提示的是,就是以上述这个方法的思路。我先暂时不把答案放上来,你可以自己想想。过两天我把答案放上来。
     
     
     
    更新(2011年4月17日):大家都很聪明,533是应该是最优解,大家用了很多种方法阐述了这一过程,我最初的想法和朋友xPacificCoolShell的一致!很高兴看到有更为科学的解法,受教了。另外,还有一些朋友提出火车不能随时随地调头的实际情况,非常不错,所以,以后这题不能用火车运煤了,可能是用马运草更好一点了。;)
  • 相关阅读:
    Codeforces Round #450 (Div. 2)
    吉哥系列故事——恨7不成妻(数位DP)
    Codeforces Round #546 (Div. 2)
    Balanced Numbers (数位DP)
    XHXJ's LIS(数位DP)
    Balanced Number(数位DP)
    (2016北京集训十三)【xsy1533】mushroom
    (2016北京集训十三)【xsy1532】网络战争
    (2016北京集训十三)【xsy1531】魔法游戏
    (2016北京集训十二)【xsy1542】疯狂求导
  • 原文地址:https://www.cnblogs.com/bluewelkin/p/3578040.html
Copyright © 2011-2022 走看看