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; }
浮沙之上勿筑高台