/**
* Analysis:
*
* b[0] = a[1]*a[2]...*a[N-1]
* b[3] = a[0]*a[1]*a[2] * a[4]*...*a[N-1]
* b[4] = a[0]*a[1]*a[2]*a[3] * a[5]*...*a[N-1]
*
* b[i] = a[0]*a[1]*a[i-1] * a[i+1]*...*a[N-1]
*
* b[i] = Ci * Di 其中: (前半部分) Ci = a[0]*...*a[i-1],
* (后半部分) Di = a[i+1]*...*a[N-2]*a[N-1]
*
*/
void getArrayData(const int a[], const int len, int b[])
{
/*Traversal Array*/
int i;
b[0] = 1;
/*前半部分值*/
for (i = 1; i < len; ++ i)
{
b[i] = b[i - 1] * a[i - 1];
}
/*获取后半部分, 并与前半部分相乘*/
for (i = len - 1; i >= 1; -- i)
{
/*与前半部分相乘*/
b[i] *= b[0];
/*获取后半部分*/
b[0] *= a[i];
}
}
/**
* Analysis:
*
* b[0] = a[1]*a[2]...*a[N-1]
* b[3] = a[0]*a[1]*a[2] * a[4]*...*a[N-1]
* b[4] = a[0]*a[1]*a[2]*a[3] * a[5]*...*a[N-1]
*
* b[i] = a[0]*a[1]*a[i-1] * a[i+1]*...*a[N-1]
*
* b[i] = Ci * Di 其中: (前半部分) Ci = a[0]*...*a[i-1],
* (后半部分) Di = a[i+1]*...*a[N-2]*a[N-1]
*
*/
void getArrayData(const int a[], const int len, int b[])
{
/*Traversal Array*/
int i;
b[0] = 1;
/*前半部分值*/
for (i = 1; i < len; ++ i)
{
b[i] = b[i - 1] * a[i - 1];
}
/*获取后半部分, 并与前半部分相乘*/
for (i = len - 2; i >= 1; -- i)
{
/*获取后半部分*/
b[0] *= a[i + 1];
/*与前半部分相乘*/
b[i] *= b[0];
}
/*处理b[0],由于之前b[0]少乘了a[1]*/
b[0] *= a[1];
}
#include <stdio.h>
/**
* Analysis:
*
* b[0] = a[1]*a[2]...*a[N-1]
* b[3] = a[0]*a[1]*a[2] * a[4]*...*a[N-1]
* b[4] = a[0]*a[1]*a[2]*a[3] * a[5]*...*a[N-1]
*
* b[i] = a[0]*a[1]*a[i-1] * a[i+1]*...*a[N-1]
*
* b[i] = Ci * Di 其中: (前半部分) Ci = a[0]*...*a[i-1],
* (后半部分) Di = a[i+1]*...*a[N-2]*a[N-1]
*
*/
void getArrayData(const int a[], const int len, int b[])
{
/*Traversal Array*/
int i;
b[0] = 1;
/*前半部分值*/
for (i = 1; i < len; ++ i)
{
b[i] = b[i - 1] * a[i - 1];
}
/*获取后半部分, 并与前半部分相乘*/
for (i = len - 2; i >= 1; -- i)
{
/*获取后半部分*/
b[0] *= a[i + 1];
/*与前半部分相乘*/
b[i] *= b[0];
}
/*处理b[0],由于之前b[0]少乘了a[1]*/
b[0] *= a[1];
}
int main(int argc, char* argv[])
{
/**测试用例*/
const int N = 3;;
int i, a[] = {2,3,4}, b[N];
getArrayData(a, N, b);
for(i = 0; i < N; ++ i)
{
printf("%d ", b[i]);
}
printf("\n");
return 0;
}