C++的一道变态题

                                      

题目大概是这样的:有两个数组a[N],b[N],求构造 b[i]=a[0]*a[1]*a[2]*...a[N-1]/a[i],

要求:

1、不能使用除法。

2、空间复杂度O(1),时间复杂度O(n)

3、除循环计数器和a[N]b[N],不能使用其他变量。 

个人看法:

N有关,又要求空间复杂度O(1)

这种问题一般要借助于编译期计算,那么我的计算如下:


 代码文本如下:

#include "stdafx.h"
template<int I,int N> class A{public: static const int V=N;};
template<int M> class A<M,M>{public: static const int V=1;};
template<int I,int N> class B{public: static const int V=A<I,N>::V*B<I,N-1>::V;};
template<int I> class B<I,1>{public: static const int V=1;};
int _tmain(int argc, _TCHAR* argv[])
{
 A<4,8> a;
 B<4,8> b;
 int t=B<4,5>::V; 
 //B<4,5> = {A<4,5>::V} * {B<4,4>::V}
    //       = 5*{B<4,4>::V}
 //      =5*{A<4,4>::V}* {B<4,3>::V}
 //      =5* 1 * {B<4,3>::V}
 //      =5*1*{A<4,3>::V}*{B<4,2>::V}
 //      =5*1*3*{A<4,2>::v*{B<4,1>::V}
 //      =5*1*3*2*{B<4,1>::V}
 //      =5*1*3*2*1
 //      =30
 return 0;
}   

 

posted @ 2015-10-25 16:04  赛提斯特  阅读(205)  评论(0编辑  收藏  举报