不使用除法构造数组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 }

其实还有几种方法。。。

posted @ 2013-03-19 19:56  legendmaner  阅读(273)  评论(0编辑  收藏  举报