码迷,mamicode.com
首页 > 编程语言 > 详细

C++的一道变态题

时间:2015-10-25 18:01:24      阅读:122      评论:0      收藏:0      [点我收藏+]

标签:

                                      

题目大概是这样的:有两个数组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;
}   

 

C++的一道变态题

标签:

原文地址:http://www.cnblogs.com/stst/p/4908908.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!