兩個數組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後半部分的乘積,最後乘起來。數組