一个数组a[n],求构造出一个b[n],使得b[i]=a[0]*a[1]*...a[n-1]/a[i];不能用除法和除了循环变量外的额外变量 ,要求(1)的空间复杂度,O(n)的时间复杂度。
在网上看见这个题目,感觉很有意思。我的解法如下,不知道有没更好点的。
#include <stdlib.h>
#include <stdio.h>
void change_a2b(int a[], int len, int b[]) {
int i;
b[len -1 ] = 1;
for(i = len-2; i >= 0; i--) {
b[i] = a[i+1]*b[i+1];
}
for(i = 1; i < len ; i++) {
a[i] = a[i-1] * a[i];
b[i] = a[i -1] * b[i];
}
}
int main ( ) {
int a[100], n ,b[100], i;
scanf("%d", &n);
for( i = 0 ;i < n ;i++) {
scanf("%d", &a[i]);
}
change_a2b(a, n, b);
for(i = 0; i < n; i++ ) {
printf("%d ",b[i]);
}
printf("\n");
exit(0);
}
请访问:
http://www.daydaycode.com
本文介绍了一种特殊的数组转换方法,即在不使用除法运算的情况下,将原始数组a转换为另一个数组b,其中b[i]等于a中所有元素的乘积除以a[i]。文章提供了一个具体的C语言实现方案,该方案满足了O(n)的时间复杂度和O(1)的空间复杂度要求。
1212

被折叠的 条评论
为什么被折叠?



