两个数组a[N],b[N],其中A[N]的各个元素值已知,现求出b[i]赋值,b[i] = a[0]

两个数组a[N]b[N],其中A[N]的各个元素值已知,现求出b[i]赋值,b[i] = a[0]*a[1]*a[2]...*a[N-1]/a[i]
要求:
1.
不许用除法运算
2.
除了循环计数值,a[N],b[N]外,不许再用其余任何变量(包括局部变量,全局变量等)
3.
知足时间复杂度On),空间复杂度O1ios

#include <iostream>

using namespace std;

#define N 10

int main(int argc, char *argv[])
{
	int a[N] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
	int b[N] = {};
	
	b[0] = 1;
	for(int i=1; i<N; i++) {
		b[0] *=a[i-1];
		b[i] = b[0];
	}
	b[0] = 1;
	for(int i=N-2; i>0; i--) {
		b[0] *= a[i+1];
		b[i] *=b[0];
	}
	b[0] *= a[1];

	//Test
	for(int i=0; i<N; i++) {
		cout<<b[i]<<" ";
	}
	cout << endl;
	getchar();
	return 0;
}

确实挺巧妙!利用了b[0]做为一个temp,先计算i前半部分的乘积,再计算i后半部分的乘积,最后乘起来。数组

相关文章
相关标签/搜索