三的最大乘积

2016年9月27日

今天的练习来自编程教科书排序章节中的结束语练习:

编写一个程序,在给定的整数数组中找到三个数字的最大乘积。

你的任务是编写所需的程序。完成后,欢迎您阅读运行建议的解决方案,或在下面的评论中发布自己的解决方案或讨论练习。

页:1 2

5对“最大三乘积”的回应

  1. 保罗

    在Python中。这两个功能通过了所有PP测试。如果至少有3个数字,则只有一条规则:使用最大的3个数字或最大的数字和最小的2个数字。我测试,如果最大的数字是负数,但这不是真的需要。

    def maxp1(序列):如果len(seq)<3:raise ValueError(“序列应该至少有3个数字”)s=排序(seq)p1=s[-1]*s[-2]*s[-3]如果s[-1]<=0:返回p1返回最大值(p1,s[0]*s[1]*s[-1])def maxp2(序列):'使用2个堆来保持2个最低的数字和3个最高的数字'如果len(seq)<3:raise ValueError(“序列应该至少有3个数字”)五十、 H=[],[]#堆,用于2个最低值和3个最高值对于枚举中的i,e(seq):如果i<2:堆(L,-e)elif-e>L[0]:堆置(L,-e)如果i<3:堆(H,e)elif e>H[0]:堆置(H,e)p1=H[0]*H[1]*H[2]如果最大值(H)<=0:返回p1返回最大值(p1,最大值(H)*L[0]*L[1])
  2. 保罗

    maxp2的更短版本。

    def maxp2(序列):如果len(seq)<3:raise ValueError(“序列应该至少有3个数字”)H=堆最大(3,seq)p1=H[0]*H[1]*H[2]如果最大值(H)<=0:返回p1L=heapq.nsmallest(2,seq)返回最大值(p1,最大值(H)*L[0]*L[1])
  3. 扎克

    在朱莉娅实施。虽然这个问题看起来很直接,但暴力方法可能不是最好的方法,因为给定数组中可能有0。这是我的解决方案,它解决了这一点。当然,这整个过程可以在2个循环中实现,但这种语言中的循环非常快,在大多数情况下不会有太大差异。此外,在这样的问题中,我将开发时间最小化。

    函数main(x::数组{Int64,1})
    nx=长度(x)

    如果nx<3
    println(“数组太短!请至少提供3个整数。”)
    返回NaN
    elseif nx==3
    返回触头(x)
    其他的
    z=x[x.!=0]#去掉所有0s]
    M=-最大值(z)
    n=长度(z)

    i=1:(n-2)
    对于j=(i+1):(n-1)
    对于k=(j+1):n
    M=最大值(M,z[i]*z[j]*z[k])
    结束
    结束
    结束

    返回M
    结束
    结束

  4. 阿基利斯·佩尼亚

    PHP格式

    功能最大值($A){
    $f=1;
    纵火($A);
    $b=数组值($A);
    对于($i=0;$i<3;$i++){
    $f=$f*$b[$i];
    }
    返回print_r($f);

    }

  5. [……]在之前的练习中研究了这个问题,但不幸的是,我们错了。以下是建议的解决方案[…]

留下评论