文档库 最新最全的文档下载
当前位置:文档库 › 数组互相赋值

数组互相赋值

//已知数组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;icin>>a[i];
arr_cpy(a,b);
for(j=0;jcout<return 0;
}

相关文档