JustJavaIt的Blog

          2011年7月14日 #

          一道好玩兒的"移火柴"面試題

              還記得小時(shí)候增加或移動(dòng)一根火柴使等式成立的趣味題嗎?嘿嘿,今天就和大家分享一道面試題,和“火柴題”很像,因此也更像是趣味題,做起來(lái)非常有意思O(∩_∩)O。廢話不多說(shuō),直接上題:
             
          /*
            下面這段C程序想要輸出20個(gè)減號(hào),不過(guò),粗心的程序員把代碼寫(xiě)錯(cuò)了,你需要把下面的代碼修改正確,不過(guò),你只能增加或是修改其中的一個(gè)字符,請(qǐng)你給出三種答案。
            
          */
          int n = 20;
          for(int i=0; i<n; i--)
          {
               printf("-");
          }
                
              題目很簡(jiǎn)單,相信任何一個(gè)程序員都是能看懂的,這題不考復(fù)雜的專(zhuān)業(yè)知識(shí),當(dāng)趣味題做就行了,注意題目要求“給出三種答案”,不好漏解就好。
             
              下面帖上我的解題思路:   

              簡(jiǎn)單分析一下程序不難看出,“粗心的程序員”把i++寫(xiě)成了i--,導(dǎo)致循環(huán)不能執(zhí)行20次。因此,我們的最終目的就是讓for循環(huán)執(zhí)行20次。題目的要求是只能增加或修改一個(gè)字符,這么一來(lái),可以修改的也只有"int n=20"和"for (int i=0;i<n;i--)"這兩行了。簡(jiǎn)單嘗試一下修改n的數(shù)值,很快發(fā)現(xiàn)行不通,所以解題的關(guān)鍵就是在for循環(huán)條件里下功夫

              首先我們嘗試一下修改"int i=0"中的i值,由于要同時(shí)滿足i<20和i-20>=20,即40<=i<20,顯然不可能。

              接著,嘗試修改"i<n"這個(gè)條件表達(dá)式,稍作思考,我們發(fā)現(xiàn)如果給i前面加個(gè)符號(hào),變成"-i<n",也就是"i>-20",那么每次循環(huán)依次是0>-20,-1>-20 ... -19>-20正好能運(yùn)行20次,符合題意!這樣,第一種解法就出來(lái)了:

          1 int n = 20;
          2 for(int i=0-i<n; i--)
          3 {
          4      printf("-");
          5 }

              再看看修改"i--"有沒(méi)有希望,改成i++顯然是不行了,那改一下變量呢?n--?竟然是可以的!每次循環(huán)的條件為0<20,0<19 ... 0<1,同樣是20次循環(huán),太神奇了!這題告訴我們for(int i=0; i<n; n--)也是能做n次循環(huán)的,雖然我們平常幾乎不這么寫(xiě),因?yàn)閚往往是不可變的(比如特定數(shù)組的長(zhǎng)度,容器的size等)。解法二:

          1 int n = 20;
          2 for(int i=0; i<n; n--)
          3 {
          4      printf("-");
          5 }

              前兩種解法總體上還是挺容易想到的,第三種就要繞一些了,我也是想了半天(笨啊o(>﹏<)o)。回到修改"i<n"上,由于在c語(yǔ)言中非0即true,任何一個(gè)int值都是可以當(dāng)布爾值來(lái)使的,因此可以試著把"i<n"換成數(shù)值,比如i+n,i-n,i*n等等,而i+n恰好符合題意(很詭異的說(shuō)~)解法三:

          1 int n = 20;
          2 for(int i=0; i+n; i--)
          3 {
          4      printf("-");
          5 }

              好了,這題基本做完了,不知道還有木有別的解法,有的話給我留言哈O(∩_∩)O

          posted @ 2011-07-14 11:47 JustJavaIt 閱讀(2045) | 評(píng)論 (4)編輯 收藏

          主站蜘蛛池模板: 涞源县| 江油市| 平阴县| 松潘县| 贵州省| 宿州市| 新邵县| 双江| 广平县| 江安县| 山阴县| 昌江| 巨鹿县| 赣州市| 金华市| 鄱阳县| 天门市| 广水市| 漳平市| 油尖旺区| 哈尔滨市| 汤原县| 临猗县| 兴业县| 石首市| 沭阳县| 墨玉县| 宾川县| 北宁市| 康马县| 会东县| 奉新县| 湄潭县| 视频| 饶河县| 西乌珠穆沁旗| 洮南市| 望奎县| 来凤县| 延津县| 湛江市|