两个数组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.知足时间复杂度O(n),空间复杂度O(1)ios
#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后半部分的乘积,最后乘起来。数组