不使用除法构造数组b[N]
给定一个数组a[N],我们希望构造数组b[N],其中b[i]=a[0]*a[1]*...*a[N-1]/a[i]。在构造过程:
不允许使用除法;
要求O(1)空间复杂度和O(n)时间复杂度;
除遍历计数器与a[N] b[N]外,不可使用新的变量(包括栈临时变量、对空间和全局静态变量等);
请用程序实现并简单描述。
虽然前不久做了一次,但手写还是错,临界问题未考虑清楚。。。。闷~
现在查错不使用调试。。。下次要学会证明算法的正确性。
1 void func3(int a[], int b[], int n) 2 { 3 b[n-1] = 1; 4 5 for (int i=n-1; i>0; i--) 6 { 7 b[i-1]= b[i]*a[i]; 8 } 9 b[n-1]=a[0]; 10 for (i=1; i<n-1; i++) 11 { 12 b[i] *= b[n-1]; 13 b[n-1] = b[n-1]*a[i]; 14 } 15 16 }
其实还有几种方法。。。