青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 297,  comments - 15,  trackbacks - 0

http://zhedahht.blog.163.com/blog/static/2541117420072915131422/題目:求1+2+…+n,要求不能使用乘除法、forwhile、ifelse、switch、case等關(guān)鍵字以及條件判斷語句(A?B:C)。

分析:這道題沒有多少實際意義,因為在軟件開發(fā)中不會有這么變態(tài)的限制。但這道題卻能有效地考查發(fā)散思維能力,而發(fā)散思維能力能反映出對編程相關(guān)技術(shù)理解的深刻程度。

通常求1+2+…+n除了用公式n(n+1)/2之外,無外乎循環(huán)和遞歸兩種思路。由于已經(jīng)明確限制forwhile的使用,循環(huán)已經(jīng)不能再用了。同樣,遞歸函數(shù)也需要用if語句或者條件判斷語句來判斷是繼續(xù)遞歸下去還是終止遞歸,但現(xiàn)在題目已經(jīng)不允許使用這兩種語句了。

我們?nèi)匀粐@循環(huán)做文章。循環(huán)只是讓相同的代碼執(zhí)行n遍而已,我們完全可以不用forwhile達到這個效果。比如定義一個類,我們new一含有n個這種類型元素的數(shù)組,那么該類的構(gòu)造函數(shù)將確定會被調(diào)用n次。我們可以將需要執(zhí)行的代碼放到構(gòu)造函數(shù)里。如下代碼正是基于這個思路:

class Temp
{
public:
      Temp() { ++ N; Sum += N; }

      static void Reset() { N = 0; Sum = 0; }
      static int GetSum() { return Sum; }

private:
      static int N;
      static int Sum;
};

int Temp::N = 0;
int Temp::Sum = 0;

int solution1_Sum(int n)
{
      Temp::Reset();

      Temp *a = new Temp[n];
      delete []a;
      a = 0;

      return Temp::GetSum();
}

我們同樣也可以圍繞遞歸做文章。既然不能判斷是不是應(yīng)該終止遞歸,我們不妨定義兩個函數(shù)。一個函數(shù)充當(dāng)遞歸函數(shù)的角色,另一個函數(shù)處理終止遞歸的情況,我們需要做的就是在兩個函數(shù)里二選一。從二選一我們很自然的想到布爾變量,比如ture1)的時候調(diào)用第一個函數(shù),false0)的時候調(diào)用第二個函數(shù)。那現(xiàn)在的問題是如和把數(shù)值變量n轉(zhuǎn)換成布爾值。如果對n連續(xù)做兩次反運算,即!!n,那么非零的n轉(zhuǎn)換為true,0轉(zhuǎn)換為false。有了上述分析,我們再來看下面的代碼:

class A;
A* Array[2];

class A
{
public:
      virtual int Sum (int n) { return 0; }
};

class B: public A
{
public:
      virtual int Sum (int n) { return Array[!!n]->Sum(n-1)+n; }
};

int solution2_Sum(int n)
{
      A a;
      B b;
      Array[0] = &a;
      Array[1] = &b;

      int value = Array[1]->Sum(n);

      return value;
}

這種方法是用虛函數(shù)來實現(xiàn)函數(shù)的選擇。當(dāng)n不為零時,執(zhí)行函數(shù)B::Sum;當(dāng)n0時,執(zhí)行A::Sum。我們也可以直接用函數(shù)指針數(shù)組,這樣可能還更直接一些:

typedef int (*fun)(int);

int solution3_f1(int i) 
{
      return 0;
}

int solution3_f2(int i)
{
      fun f[2]={solution3_f1, solution3_f2}; 
      return i+f[!!i](i-1);
}

另外我們還可以讓編譯器幫我們來完成類似于遞歸的運算,比如如下代碼:

template <int n> struct solution4_Sum
{
      enum Value { N = solution4_Sum<n - 1>::N + n};
};

template <> struct solution4_Sum<1>
{
      enum Value { N = 1};
};

solution4_Sum<100>::N就是1+2+...+100的結(jié)果。當(dāng)編譯器看到solution4_Sum<100>時,就是為模板類solution4_Sum以參數(shù)100生成該類型的代碼。但以100為參數(shù)的類型需要得到以99為參數(shù)的類型,因為solution4_Sum<100>::N=solution4_Sum<99>::N+100。這個過程會遞歸一直到參數(shù)為1的類型,由于該類型已經(jīng)顯式定義,編譯器無需生成,遞歸編譯到此結(jié)束。由于這個過程是在編譯過程中完成的,因此要求輸入n必須是在編譯期間就能確定,不能動態(tài)輸入。這是該方法最大的缺點。而且編譯器對遞歸編譯代碼的遞歸深度是有限制的,也就是要求n不能太大。

大家還有更多、更巧妙的思路嗎?歡迎討論^_^

本文已經(jīng)收錄到《劍指Offer——名企面試官精講典型編程題》一書中,有改動。歡迎關(guān)注。我把這篇博客翻譯成了英文,感興趣的朋友可以到

http://codercareer.blogspot.com/2011/10/no-08-calculate-12n.html查看。

博主何海濤對本博客文章享有版權(quán)。網(wǎng)絡(luò)轉(zhuǎn)載請注明出處http://zhedahht.blog.163.com/。整理出版物請和作者聯(lián)系。對解題思路有任何建議,歡迎在評論中告知,或者加我微博http://weibo.com/zhedahht或者http://t.163.com/zhedahht與我討論。謝謝。
from:
http://zhedahht.blog.163.com/blog/static/2541117420072915131422/

posted on 2012-07-05 10:04 chatler 閱讀(477) 評論(0)  編輯 收藏 引用 所屬分類: C++_BASIS
<2025年11月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

常用鏈接

留言簿(10)

隨筆分類(307)

隨筆檔案(297)

algorithm

Books_Free_Online

C++

database

Linux

Linux shell

linux socket

misce

  • cloudward
  • 感覺這個博客還是不錯,雖然做的東西和我不大相關(guān),覺得看看還是有好處的

network

OSS

  • Google Android
  • Android is a software stack for mobile devices that includes an operating system, middleware and key applications. This early look at the Android SDK provides the tools and APIs necessary to begin developing applications on the Android platform using the Java programming language.
  • os161 file list

overall

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲国产成人91精品| 欧美日韩中文字幕| 亚洲黄色三级| 国产伦精品一区二区三区照片91 | 亚洲午夜女主播在线直播| 亚洲电影免费在线| 亚洲精品视频一区二区三区| 一本久久综合| 欧美亚洲免费高清在线观看| 久久久91精品国产| 欧美成人精品1314www| 欧美日产在线观看| 国产精品视频一| 一区免费视频| 日韩视频在线一区| 新67194成人永久网站| 久久野战av| 亚洲日本成人网| 欧美一区二区三区免费视| 麻豆精品视频| 欧美午夜无遮挡| 影音先锋中文字幕一区| 亚洲一级二级| 欧美成人精品不卡视频在线观看| 99精品视频免费全部在线| 欧美在线一二三四区| 欧美精品一区二区三区在线播放 | 久久国产精品久久久久久| 欧美韩日精品| 亚洲男人的天堂在线aⅴ视频| 久久久亚洲一区| 国产精品福利av| 亚洲日本电影| 久久久亚洲精品一区二区三区| 亚洲欧洲日韩女同| 久久国产精品高清| 国产精品久久久久9999高清| 亚洲黄色在线看| 久久久精品动漫| 一区二区不卡在线视频 午夜欧美不卡'| 久久精品91| 国产精品丝袜久久久久久app| 亚洲人永久免费| 欧美 亚欧 日韩视频在线| 欧美在线高清| 国产日韩欧美亚洲一区| 亚洲一区二区免费视频| 亚洲国产片色| 欧美11—12娇小xxxx| 一区二区三区在线观看国产| 欧美在线播放一区| 午夜精品偷拍| 国产网站欧美日韩免费精品在线观看| 国产精品扒开腿爽爽爽视频| 亚洲黄色一区| 欧美成人日韩| 久久综合久色欧美综合狠狠| 一区在线免费| 你懂的成人av| 免费观看日韩av| 亚洲国产午夜| 亚洲激情国产| 欧美日韩精品一区二区| 99在线观看免费视频精品观看| 亚洲高清不卡av| 欧美高清成人| 亚洲精品久久嫩草网站秘色| 亚洲电影免费观看高清| 欧美激情麻豆| 亚洲一区二区免费| 午夜在线视频观看日韩17c| 国产亚洲毛片在线| 欧美成人久久| 欧美视频一区二区三区| 香蕉乱码成人久久天堂爱免费| 亚洲神马久久| 国产在线视频欧美| 欧美成人国产| 欧美日韩亚洲一区三区| 香蕉乱码成人久久天堂爱免费 | 国产精品一区三区| 久久米奇亚洲| 免费久久99精品国产| 日韩午夜免费| 亚洲在线一区| 亚洲第一在线| 9l国产精品久久久久麻豆| 国产欧美精品xxxx另类| 欧美成年人视频网站欧美| 欧美美女操人视频| 欧美影视一区| 欧美成人激情在线| 欧美一区二区免费视频| 免费一区视频| 欧美专区在线观看一区| 嫩草影视亚洲| 久久国产99| 欧美人与性动交cc0o| 久久精品男女| 欧美日韩视频不卡| 久热精品视频| 国产精品激情电影| 亚洲国产婷婷| 国产一区二区三区电影在线观看| 亚洲国产三级| 国外精品视频| 中日韩视频在线观看| 亚洲福利视频专区| 欧美一级大片在线观看| 国产精品99久久久久久久久久久久| 欧美一区二区三区免费观看 | 另类人畜视频在线| 亚洲一区二区四区| 免费亚洲一区| 美女日韩欧美| 国产日韩欧美自拍| 艳女tv在线观看国产一区| 亚洲高清一区二| 久久不见久久见免费视频1| 亚洲自拍另类| 欧美日韩亚洲视频一区| 亚洲福利视频在线| 在线免费高清一区二区三区| 午夜一区二区三区在线观看| 亚洲尤物视频网| 欧美日韩国产一中文字不卡| 欧美激情国产日韩| 亚洲福利视频一区| 久久久久一本一区二区青青蜜月| 欧美一区二区三区视频在线观看| 欧美日韩精品免费观看视一区二区| 亚洲福利久久| 亚洲肉体裸体xxxx137| 欧美成人免费播放| 欧美激情一区二区三区成人| 亚洲福利在线看| 免费观看久久久4p| 亚洲国产精品久久久| 亚洲九九精品| 欧美日韩精品不卡| 在线一区二区三区四区五区| 亚洲影院免费| 国产精品日韩在线观看| 亚洲女爱视频在线| 久久狠狠婷婷| 激情一区二区三区| 欧美a级大片| 亚洲美女视频| 午夜精品婷婷| 国色天香一区二区| 免费成人毛片| 99国内精品| 午夜在线精品| 国产一区二区日韩精品| 久久这里只精品最新地址| 亚洲国产精品悠悠久久琪琪| 一区二区欧美在线| 国产女主播视频一区二区| 欧美一区二区三区精品电影| 媚黑女一区二区| 亚洲免费观看视频| 国产精品午夜视频| 鲁大师成人一区二区三区| 亚洲精品少妇| 欧美一区二区性| 亚洲欧洲日产国码二区| 欧美日韩一区高清| 午夜日韩福利| 亚洲国产导航| 久久av免费一区| 日韩视频一区二区在线观看| 国产精品一区久久久| 欧美大片免费观看| 亚洲欧美日韩国产成人| 农村妇女精品| 亚洲女人天堂av| 在线看日韩欧美| 国产精品爽爽ⅴa在线观看| 男女精品网站| 欧美在线3区| 一区二区三区视频在线| 美女视频网站黄色亚洲| 亚洲自拍三区| 欧美激情一二三区| 欧美一区二区三区另类 | 国产精品国产一区二区 | 欧美激情亚洲一区| 欧美在线观看视频一区二区三区| 亚洲国内在线| 久久久天天操| 午夜精品国产| 一本大道久久a久久综合婷婷| 国产综合自拍| 国产精品人成在线观看免费| 欧美女主播在线| 欧美成人久久| 欧美99久久| 免费不卡在线观看| 久久综合九色99| 久久亚洲图片|