-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathoffer_64
86 lines (71 loc) · 1.28 KB
/
offer_64
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
//求1+2+...+n
//解法1:利用构造函数求解
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[n];
delete []a;
a=nullptr;
return Temp::GetSum;
}
//解法2:利用虚函数求解
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;
}
//解法3:利用函数指针求解
typedef unsigned int (*fun)(unsigned int);
unsigned int Solution3_Teminator(unsigned int n)
{
return 0;
}
unsigned int Sum_Soultion3(unsigned int n)
{
static fun f[2]={Solution_Teminator,Sum_Solution3};
return n+f[!!n](n-1);
}
//解法4:利用模板类型求解
template<unsigned int n>
struct Sum_Solution4
{
enum Value{N=Sum_Solution4<n-1>::N-1};
}
template<>struct Sum_Solution4<1>
{
enum Value{N=1};
}