"Sword refers to offer": 1 + 2 + 3 +... + n, "Sword refers to offer"
[Disclaimer: All Rights Reserved. indicate the source for reprinting. Do not use it for commercial purposes. Contact mailbox: libin493073668@sina.com]
Question link: http://www.nowcoder.com/practice/7a0da8fc483247ff8800059e12d7caf1? Rp = 3 & ru =/ta/coding-interviews & qru =/ta/coding-interviews/question-ranking
Description
Evaluate 1 + 2 + 3 +... + n. It is required that the keyword and condition judgment statement (? B: C ).
Ideas
At the beginning of this question, it seems that we can't think of any great method, but if we are familiar with the features of C ++ or have a better understanding of recursion, we can still find some solutions.
1. Use Recursion
class Solution{public:int Sum_Solution(int n){int sum = n;bool flag = (n>0) && ((sum+=Sum_Solution(n-1))>0);return sum;}};
2. Constructor
class Temp{ public: Temp() { ++N; Sum+=N; } static void Reset() { N = Sum = 0; } static int GetSum() { return Sum; } private: static int N; static int Sum;}; int Temp::N = 0;int Temp::Sum = 0; class Solution{ public: int Sum_Solution(int n) { Temp::Reset(); Temp *a = new Temp[n]; delete []a; a = NULL; return Temp::GetSum(); }};
3. Virtual Functions
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; }}; class Solution{ public: int Sum_Solution(int n) { A a; B b; Array[0] = &a; Array[1] = &b; return Array[1]->Sum(n); }};
Copyright Disclaimer: This article is the original article of the blogger. If it is reproduced, please indicate the source