本文主要是介绍数组元素的值为其他所有元素的累积,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目:一个长度为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; }
运行界面如下:
这篇关于数组元素的值为其他所有元素的累积的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!