给定一个数组A[N],我们希望构造数组b[N],其中b[j]=a[0]*a[1]*...*a[j-1]*a[j+1]*...*a[N];构造过程不能使用除法:
要求时间复杂度O(n),空间复杂度O(1);
除遍历计数器与a[N] b[N]外,不可使用新的变量(包括临时栈变量,堆空间变量,全局变量);
断断续续想了好几天,
#include<iostream>
using namespace std;
template<typename T>
void process(T* a,int n);
int main()
{
int a[10]={1,2,3,4,5,6,7,8,9,10};
process(a,10);
return 0;
}
template<typename T>
void process(T* a,int n)
{
int b[10];
b[0]=1;
for(int i=1;i<=n-1;++i)
{
b[i]=b[i-1]*a[i-1];
}
for(int j=n-2;j>=0;--j)
{
b[j]=b[j]*a[j+1];
a[j]=a[j]*a[j+1];
}
for(int i=0;i<=n-1;++i)
cout<<b[i]<<",";
}
注意:最好写成template