64 求1 2 3 n(發散思維能力 )

2022-08-18 01:42:16 字數 1936 閱讀 3066

題目描述:

求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等關鍵字及條件判斷語句(a?b:c)。

解題思路:

1)利用&&的短路特性

2)  利用sizeof特性,使用公式n(n+1)/2

3)利用建構函式求解:

先定義乙個型別,然後建立n個該型別的例項,那麼這個型別的建構函式將被呼叫n次。將累加的**放到建構函式中。

4)利用虛函式求解: 

測試用例:

1) 邊界值:(輸入0和1)

2) 功能測試(n=5,n=10)

**:

1)&&的短路特性 複雜度:o(n)

1

1class

solution 88

};910 code01

view code

缺點:遞迴的層數不能太深<3000

2)sizeof特性,使用公式n(n+1)/2

1

1class

solution

88 };

code02

3)  利用建構函式

1

class

unit

4static

void reset() //

static

5static unsigned int getsum() //

static

6private:7

static unsigned intn;8

static unsigned int

sum;9};

1011 unsigned int unit::n = 0; //

一般在類外初始化(類內也不會報錯)

12 unsigned int unit::sum = 0; //

類外不用在加static

1314

class

solution

24 };

code03

注意:「1」區域性static物件在第一次使用前分配,在程式結束是銷毀。並不是在區域性作用域結束是銷毀。

「2」動態分配的物件的生存期與它們在**建立是無關的,只有當顯式地被釋放時,這些物件才會銷毀。(即必須被顯示銷毀!!區域性作用域並不會自動銷毀)

「3」靜態記憶體:用來保護區域性static物件、類static資料成員、以及定義在任何函式外的變數。編譯器建立,程式結束時銷毀(不受區域性作用域控制)。

棧記憶體:用於儲存定義在函式內的非static物件。僅在定義的程式執行的時候才存在(區域性作用域)。

自由空間(堆記憶體):儲存動態分配的物件。必須顯示銷毀。         

「4」new預設情況下是預設初始化,即內建物件或組合型物件的值是為定義的,而類型別物件將使用預設建構函式進行初始化:

string *ps = new string; //初始化為空的字串

int * pi = new int; //pi指向乙個未初始化的int         可使用值初始化:int * pi = new int(); z值初始化為0。  也可以傳入引數:int * pi = new int(1024);

或列表初始化 vector*pv = new vector;

「5」delete接受物件為指標型別,

當其釋放一塊非new建立的記憶體,或者將相同的指標(指向同一塊記憶體的指標)釋放多次,其行為是未定義的。

「6」當程式用光了可用記憶體,new表示式會失敗,預設情況丟擲std::bad_alloc異常。

阻止丟擲異常: int *p = new (nothrow) int; //如果失敗返回空指標。

4) 利用虛函式求解

基礎知識補充:

6 5 發散思維能力

面試題47 不用加減乘除做加法 面試題48 不能被繼承的類 參考 所有offer題目的leetcode鏈結及python實現 github target offer 題目 求1 2 n,要求不能使用乘除法 for while if else switch case等關鍵字及條件判斷語句 a?b c ...

劍指offer 發散思維能力

求1 2 3 n,要求不能使用乘除法 for while if else switch case等關鍵字及條件判斷語句 a?b c 1 解法一 python函式 coding utf 8 class solution def sum solution self,n write code here r...

劍指Offer 發散思維能力

不用加減乘除做加法 求1 2 3 n,要求不能使用乘除法 for while if else switch case等關鍵字及條件判斷語句 a?b c 看到這道題的第一反應是使用迴圈或者遞迴,但是,題目要求不能使用for while if else switch case等關鍵字及條件判斷語句。第二...