数组元素的值为其他所有元素的累积
题目:一个长度为n的数组a[0],a[1],...,a[n-1]。现在更新数组的各个元素,即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 "stdafx.h"
#include <iostream>
using namespace std;
void PrintArray(int *a, int length)
{
for (int i = 0; i < length; i++)
{
cout<<a[i]<<" ";
}
cout<<endl;
}
//数组元素的值为其他所有元素的累积
void UpdateArrayNumber(int *a, int length)
{
if (NULL == a || length <= 0)
{
return;
}
int *accumulate = new int[length];
accumulate[0] = 1;
for (int i = 1; i < length; i++)
{
accumulate[i] = a[i - 1] * accumulate[i - 1]; //accumlate[i]= a[0]*a[1]*...*a[i-1]
}
int tmp = 1;
for (int i = length - 2; i >= 0; i--)
{
tmp *= a[i + 1]; //temp= a[n]*a[n-1]*...a[i+1]
accumulate[i] *= tmp; //accumulate[i] = a[0]*a[1]*...*a[n]/a[i]
}
for (int i = 0; i < length; i++)
{
a[i] = accumulate[i];
}
delete [] accumulate;
}
int _tmain(int argc, _TCHAR* argv[])
{
int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int length = sizeof(a)/sizeof(a[0]);
cout<<"before: ";
PrintArray(a, length);
UpdateArrayNumber(a, length);
cout<<"after: ";
PrintArray(a, length);
cout<<endl;
return 0;
}
运行界面如下:

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
