剑指offer——面试题46:求1+2+...+n的多种解法
2016-12-11 22:46
405 查看
class Temp
{
public:
Temp() { ++ N; Sum += N; }
static void Reset() { N = 0; Sum = 0; }
static unsigned int GetSum() { return Sum; }
private:
static unsigned int N;
static unsigned int Sum;
};
unsigned int Temp::N = 0;
unsigned int Temp::Sum = 0;
unsigned int Sum_Solution1(unsigned int n)
{
Temp::Reset();
Temp *a = new Temp
;
delete []a;
a = NULL;
return Temp::GetSum();
}
class A;
A* Array[2];
class A
{
public:
virtual unsigned int Sum (unsigned int n)
{
return 0;
}
};
class B: public A
{
public:
virtual unsigned int Sum (unsigned int n)
{
return Array[!!n]->Sum(n-1) + n;
}
};
int Sum_Solution2(int n)
{
A a;
B b;
Array[0] = &a;
Array[1] = &b;
int value = Array[1]->Sum(n);
return value;
}
typedef unsigned int (*fun)(unsigned int);
unsigned int Solution3_Teminator(unsigned int n)
{
return 0;
}
unsigned int Sum_Solution3(unsigned int n)
{
static fun f[2] = {Solution3_Teminator, Sum_Solution3};
return n + f[!!n](n - 1);
}
template <unsigned int n> struct Sum_Solution4
{
enum Value { N = Sum_Solution4<n - 1>::N + n};
};
template <> struct Sum_Solution4<1>
{
enum Value { N = 1};
};
template <> struct Sum_Solution4<0>
{
enum Value { N = 0};
};
相关文章推荐
- 剑指Offer(第二版)面试题46:把数字翻译成字符串
- 《剑指offer》面试题10:斐波那契数列(含矩阵乘法解法)
- 一个数据库面试题的多种解法
- 剑指offer——面试题46:求1+2+ ... +n 之和
- 一道百度java面试题的多种解法
- 《剑指Offer》学习笔记--面试题46:求1+2+...+n
- 【动态规划】 Google面试题 爬楼梯问题 斐波那契问题的多种解法
- 剑指Offer:面试题46 求1+2+...+n
- (剑指Offer)面试题46:求1+2+3+....+n
- 剑指Offer系列-面试题46:求1+2+3+···+n
- 理解《剑指Offer》之面试题6 重建二叉树
- 剑指offer 面试题57 删除链表中重复的结点
- HDU 1043 八数码问题的多种解法
- 剑指offer《面试题6:重建二叉树》
- 剑指offer-面试题13.在O(1)时间删除链表节点
- 剑指Offer第六章面试题(Java版)
- 面试题04_替换空格_剑指Offer系列
- 剑指Offer---面试题27:二叉搜索树与双向链表
- 剑指offer-面试题11.数值的整数次方
- 剑指offer面试题12-打印1到最大的n位数