題目:求1+2+…十n,要求不能使用乘除法、for、while、if、 else.switch,case等關鍵字及條件判斷語句(a?b:c)
解法1:建構函式求解,建立n個該型別的例項,把累加放在建構函式裡做。
class temp
static void reset()
static unsigned int getsum()
};unsigned int temp::n = 0;
unsigned int temp::sum = 0;
unsigned int sum_solution1(unsigned int n)
解法2:虛函式求解,定義兩個函式,乙個函式充當遞迴函式的角色,另乙個函式做遞迴的終止判斷。做遞迴終止的判斷時,可對n進行兩次非運算。即當n=0時,即可判斷遞迴終止。
class a;
a*array[2];
class a
};class b:public a
};int sum_solution2 (int n)
建構函式知識點補充:
1.建構函式是一種特殊的成員函式,它的名字和類名相同,沒有返回值,不需要使用者呼叫(使用者也不能呼叫),而是在建立物件時自動執行。建構函式的作用是在建立物件時進行初始化工作,最常見的就是對成員變數賦值。
2.一旦在類中定義了建構函式,那麼建立物件時一定會被執行;如果建構函式有引數,建立物件時就要傳參。
3.建構函式不允許有返回值也不能宣告為void
4.如果使用者自己沒有定義建構函式,那麼編譯器會自動生成乙個預設的建構函式,只是這個建構函式的函式體是空的,也沒有引數,不執行任何操作。
5.建構函式允許過載,但只有乙個被執行
6.不帶引數的建構函式使該類的每乙個物件都得到相同的初始值。帶引數的建構函式,在呼叫不同物件的建構函式時,將不同的資料傳給建構函式,以實現不同的初始化。如:box::box(int h,int w,int len)
7.引數初始化表對資料成員初始化
#include using namespace std;
class box
int volume( );
private :
int height;
int width;
int length;
};box::box( ) //定義乙個無參的建構函式
int box::volume( )
int main( )
{ box box1; //建立物件 box1,不指定實參
cout<<"the volume of box1 is "《析構函式知識點補充:
1.析構函式也是一種特殊的成員函式,沒有返回值,不需要使用者呼叫,而是在銷毀物件時自動執行。與建構函式不同的是,析構函式的名字是在類名前面加乙個」~「符號
2.析構函式沒有引數,不能被過載,因此乙個類只能有乙個析構函式。如果使用者沒有定義,那麼編譯器會自動生成。
3.析構函式在物件被銷毀前執行;要知道析構函式什麼時候被呼叫,就要先知道物件什麼時候被銷毀。
4.三個物件入棧的順序依次是 stu1、stu2、stu3,出棧(銷毀)的順序依次是stu3、stu2、stu1,它們對應的析構函式的執行順序也就一目了然了。
虛函式知識點補充:
1.在基類用 virtual 宣告成員函式為虛函式。
2.在派生類中重新定義此函式,要求函式名、函式型別、函式引數個數和型別全部與基類的虛函式相同,並根據派生類的需要重新定義函式體。
3.定義乙個指向基類物件的指標變數,並使它指向同一類族中需要呼叫該函式的物件。通過該指標變數呼叫此虛函式,此時呼叫的就是指標變數指向的物件的同名函式。
刷演算法 求1 2 3 n
求1 2 3 n,要求不能使用乘除法 for while if else switch case等關鍵字及條件判斷語句 a?b c 題目要求不能使用乘除法 for while if else switch case等關鍵字及條件判斷語句,那麼首先就要思考怎麼才能使n一次次的相加且到0的時候結束。首先...
演算法練習篇之 求1 2 3 n
求1 2 3 n,要求不能使用乘除法 for while if else switch case等關鍵字及條件判斷語句 a?b c 累加不能用迴圈的話,那就試試遞迴吧。判斷遞迴的終止條件不能用 if 和 switch,那就用短路與代替。n 0 sum sum solution n 1 0只有滿足n ...
劍指offer 遞迴 求1 2 3 n
題目描述 求1 2 3 n,要求不能使用乘除法 for while if else switch case等關鍵字及條件判斷語句 a?b c 思路 使用遞迴f n f n 1 n,但是不能使用if進行遞迴出口的控制,因此利用python中and的屬性,即and判斷都為真的話輸出and後面的那個數字。...