特殊方法求1~n的和
生活随笔
收集整理的這篇文章主要介紹了
特殊方法求1~n的和
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目:求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case等關鍵字以及條件判斷語句(A?B:C)。
???????
分析:這道題沒有多少實際意義,因為在軟件開發中不會有這么變態的限制。但這道題卻能有效地考查發散思維能力,而發散思維能力能反映出對編程相關技術理解的深刻程度。
? ?通常求1+2+…+n 除了用公式n(n+1)/2之外,無外乎循環和遞歸兩種思路。由于已經明確限制for和while的使用,循環已經不能再用了。同樣,遞歸函數也需要用if語句或者條件判斷語句來判斷是繼續遞歸下去還是終止遞歸,但現在題目已經不允許使用這兩種語句了。我們仍然圍繞循環做文章。循環只是讓相同的代碼執行n遍而已,我們完全可以不用for和while達到這個效果。比如定義一個類,我們new一含有n個這種類型元素的數組,那么該類的構造函數將確定會被調用n次。我們可以將需要執行的代碼放到構造函數里。
#include <iostream> #include <string.h> #include <stdio.h>using namespace std;class Node {private:static int i;static int ans;public:Node(){i++;ans += i;}static void set(){i = 0;ans = 0;}static int getSum(){return ans;} };int Node::i = 0; int Node::ans = 0;int Work(int n) {Node::set();Node *node = new Node[n];delete []node;node = NULL;return Node::getSum(); }int main() {int n;while(cin>>n)cout<<Work(n)<<endl;return 0; }
總結
以上是生活随笔為你收集整理的特殊方法求1~n的和的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数论经典题目
- 下一篇: HDU2608 0 or 1