搜狗的一道笔试题,
a[0]变为a[1]到a[n-1]的积,a[1]变为a[0]和a[2]到a[n-1]的积,……a[n-1]为a[0]到a[n-2]的积。要求:具有线性复杂度。不能使用除法运算符。
#include <iostream>
using namespace std;
int main(void)
{
int a[]={1,2,3,5,6};
int const N=sizeof(a)/sizeof(a[0]);
int b[N]; // b[N]表示在第i位之前的各位的积,c[N]表示在第i位置之后的积
int c[N];
int i;
int j;
b[0]=1;
c[N-1]=1;
for(i=1; i<N; i++)
b[i]=a[i-1]*b[i-1];
for(j=N-2;j>=0;j-- )
c[j]=a[j+1]*c[j+1];
for(i=0; i<N ;i++)
a[i]=b[i]*c[i];
for(i=0; i<N; i++)
cout<<a[i]<<endl;
system("pause");
return 0;
}