zoukankan      html  css  js  c++  java
  • 数组元素的值为其他所有元素的累积

    题目:一个长度为n的数组a[0],a[1],...,a[n-1]。现在更新数组的各个元素,即a[0]变为a[1]到a[n-1]的积,a[1]变为a[0]和a[2]到a[n-1]的积,...,a[n-1]为a[0]到a[n-2]的积(就是除掉当前元素,其他所有元素的积)。

    要求:具有线性复杂度,且不能使用除法运算符。

    答:

    #include "stdafx.h"
    #include <iostream>
    
    using namespace std;
    
    void PrintArray(int *a, int length)
    {
        for (int i = 0; i < length; i++)
        {
            cout<<a[i]<<" ";
        }
        cout<<endl;
    }
    
    //数组元素的值为其他所有元素的累积
    void UpdateArrayNumber(int *a, int length)
    {
        if (NULL == a || length <= 0)
        {
            return;
        }
        int *accumulate = new int[length];
        accumulate[0] = 1;
        for (int i = 1; i < length; i++)
        {
            accumulate[i] = a[i - 1] * accumulate[i - 1];
        }
    
        int tmp = 1;
        for (int i = length - 2; i >= 0; i--)
        {
            tmp *= a[i + 1];
            accumulate[i] *= tmp;
        }
    
        for (int i = 0; i < length; i++)
        {
            a[i] = accumulate[i];
        }
    
        delete [] accumulate;
    }
    
    int _tmain(int argc, _TCHAR* argv[])
    {
        int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
        int length = sizeof(a)/sizeof(a[0]);
        cout<<"before: ";
        PrintArray(a, length);
        UpdateArrayNumber(a, length);
        cout<<"after:  ";
        PrintArray(a, length);
    
        cout<<endl;
        return 0;
    }

    运行界面如下:

  • 相关阅读:
    我来教你用AWS IoT.Part1--配置和接入
    Netty进行文件传输
    Spring Security-利用URL地址进行权限控制
    Java开发工作中常见问题
    java进阶学习计划
    spring cloud常用注解及关键类
    系统设计-电商排名
    java实现十大经典算法
    JDK8如何写出优雅代码
    Java实现迷宫和八皇后
  • 原文地址:https://www.cnblogs.com/venow/p/2673767.html
Copyright © 2011-2022 走看看