两个数组a[N],b[N],其中A[N]的各个元素值已知,现给b[i]赋值,b[i] = a[0]*a[1]*a[2]…*a[N-1]/a[i];

转自:http://blog.csdn.net/shandianling/article/details/8785269

问题描述:两个数组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)

 #include <stdio.h>
#include <stdlib.h> void pr_arr(int s[],int len)
{
for(int i = ; i <= len - ; i++)
{
printf("%d \n",s[i]);
}
}
int main()
{
int a[]={,,,,,,,,,};
int *b=(int*)malloc(sizeof(a));
b[]=;
int len=sizeof(a)/sizeof(int);
int j,i;
for( i=;i<len;i++)
{
b[i]=b[i-]*a[i-];
}
for(j=len-;j>=;j--)
{
b[]*=a[j+];
b[j]*=b[];
}
b[]*=a[];
pr_arr(b,len);
return ;
}
    1. #include <stdio.h>
    2. #include <stdlib.h>
    3. void pr_arr(int *s,char len)
    4. {
    5. while(len--)
    6. {
    7. printf("%d \n",*s++);
    8. }
    9. }
    10. int main()
    11. {
    12. int a[]={2,3,7,23,6,5,1,23,89,23};
    13. int *b=(int*)malloc(sizeof(a));
    14. b[0]=1;
    15. int len=sizeof(a)/sizeof(*a);
    16. int j,i;
    17. for( i=1;i<len;i++)
    18. {
    19. b[i]=b[i-1]*a[i-1];
    20. }
    21. for(j=len-2;j>=1;j--)
    22. {
    23. b[0]*=a[j+1];
    24. b[j]*=b[0];
    25. }
    26. b[0]*=a[1];
    27. pr_arr(b,len);
    28. return 0;
    29. }
上一篇:Windows10 Docker安装详细教程


下一篇:C#获取Windows10屏幕的缩放比例