0
点赞
收藏
分享

微信扫一扫

除自身以外数组的乘积

一脸伟人痣 2022-02-04 阅读 49
c语言

1.规则:用一个数组储存某个数组中除自身以外的乘积,例:给定数组arr[]={1,2,3,4,5};储存数组str[]={120,60,40,30,24};不可使用除法,当数组中只存在一个元素时,数组乘积默认为1。

2.除法思路:将数组中所有元素相乘在除以其自身某个元素求解

3.前缀思路:以某个元素为中心,可将数组分为左前缀与右前缀两边,将左前缀与右前缀相乘便是除自身以外数组的乘积,当元素为首元素时,左前缀并不存在其成员,为了防止计算出现问题可将最左成员与最右成员添加为1,乘积乘1并不会影响其值,可放心添加。

4.实现除自身以外数组的乘积

//除自身以外数组的乘积
#include<stdio.h>
int* My_lin(int arr[], int sz)
{
    int* lin = (int*)malloc(sz * sizeof(int));
    int left = 1, right = 1;
    for (int i = 0; i < sz; i++) {
        lin[i] = left;
        left *= arr[i];//左前缀之积
    }
    for (int i = sz - 1; i >= 0; i--) {
        lin[i] *= right;//乘积之和
        right *= arr[i];//右前缀之积
    }
    return lin;
}
int main()
{
    int arr[] = { 1,2,3,4,5 };
    int sz = sizeof(arr) / sizeof(arr[0]);
    int* str=My_lin(arr, sz);
    for (int i = 0; i < sz; i++){
        printf("%d ", str[i]);
    }
    return 0;
}
举报

相关推荐

0 条评论