//已知数组a[n]、b[n],设计一算法给数组b[n]赋值,且
//b[i]=a[0]*a[1]*……*a[n-2]*a[n-1]/a[i],要求如下:
//1.算法不能包含除法
//2.算法时间复杂度为o(n)
//3.空间复杂度为o(1)(除循环技术变量外没有其他变量)
//解析:
//b[0] = a[1]*a[2] *a[n-3]*a[n-2]*a[n-1]
//b[1] =a[0]* a[2] *a[n-3]*a[n-2]*a[n-1]
//b[2] =a[0]*a[1] *a[n-3]*a[n-2]*a[n-1]
//…………………………………………………………
//b[n-3] =a[0]*a[1]*a[2] *a[n-2]*a[n-1]
//b[n-2] =a[0]*a[1]*a[2]*a[n-13] *a[n-1]
//b[n-1] =a[0]*a[1]*a[2]*a[n-2]*a[n-1]
//按如下提示构造上下三角
#include
using namespace std;
const int nn=4;
void arr_cpy(int a[],int b[])
{
int i,j,k;
//构造上三角
b[nn-1]=1;
for(i=nn-2;i>0;i--)
{
b[i]=b[i+1]*a[i+1];
}
//构造下三角,并与上三角相乘
b[0]=1;
for(j=1;j
b[0]=b[0]*a[j-1];
b[j]=b[j]*b[0];
}
//重新计算b[0]
b[0]=1;
for(k=1;k
b[0]=b[0]*a[k];
}
}
int main()
{
int a[nn];
int b[nn];
int i=0,j=0;
for(i=0;i
arr_cpy(a,b);
for(j=0;j
}