標籤:迴圈 自訂 迴圈器 資料結構 演算法
大家五一節快樂啦!勞動光榮!
一大早起來刷刷演算法題,腦力勞動勞動,結果就發現了這麼道神題~
通過這道題,你可以學會:
題目:求 1+2+…+n,
要求不能使用乘除法、 for、 while、 if、 else、 switch、 case 等關鍵字以及條件判斷語句(A?B:C)
我了個去。。不能使用關鍵字,那不是自廢武功嗎??
淡定淡定~~想想,當我們使用for、while的時候,進階語言都做了些什麼,他們那邊的世界可沒有for和while。
所以,for、while迴圈語句只是進階語言給使用者提供的迴圈方式,我們完全可以自己做一個迴圈器出來!
思路
建立一個結構體(類),在其建構函式中對數字加一,
然後建立一個大小為N的該結構體類型的數組,
自然就會調用N次建構函式,也就實現了從1加到N
下面是我們自己設計的迴圈器的建構函式的代碼
Temp(){++N;Sum += N;}
非常簡單的代碼實現,每次調用時都會執行代碼塊內的語句,
其實就相當於把for(int i = 1;i<n;i++){xxx}中的,xxx和i++放在我們自己設計的迴圈器的建構函式中。
原始碼
#include <stdio.h>#include<stdlib.h>#include <iostream>#include<sstream>#include <vector>using namespace std;/**題目:求 1+2+…+n,要求不能使用乘除法、 for、 while、 if、 else、 switch、 case 等關鍵字以及條件判斷語句(A?B:C)。思路for、while迴圈語句只是進階語言給使用者提供的迴圈方式,我們完全可以自己做一個迴圈器出來。方法:建立一個結構體(類),在其建構函式中對數字加一,然後建立一個大小為N的該結構體類型的數組,自然就會調用N次建構函式,也就實現了從1加到N*/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]; //new 出 n 個數組。//銷毀對象,釋放記憶體delete []a;a = 0;return Temp::GetSum();}void main(){cout<<solution1_Sum(100)<<endl;system("pause");}
運行圖
怎樣,是不是被這道神題洗腦啦,勞動節快樂!
總結:
有時候我們可以自己寫代碼去實現進階語言給我們封裝好的工具。
C語言強化(十)求 1+2+…+n | 要求:不使用關鍵字