如何将每个值乘以彼此的值

时间:2017-04-17 15:15:31

标签: arrays ruby product cycle

我想将数组中的每个项目相互乘以,然后找到最大值。

我尝试了很多东西,直到我使用from PyQt5 import QtWidgets, QtGui, QtCore class MainWindow(QtWidgets.QMainWindow): def __init__(self, parent=None): super(MainWindow, self).__init__(parent=parent) self.center = None def mousePressEvent(self, event): if event.button() == QtCore.Qt.LeftButton: event = QtGui.QMouseEvent(QtCore.QEvent.MouseButtonPress, event.pos(), QtCore.Qt.LeftButton, QtCore.Qt.LeftButton, QtCore.Qt.NoModifier) self.center = event.pos() self.update() QtWidgets.QMainWindow.mousePressEvent(self, event) def paintEvent(self, event): if self.center: painter = QtGui.QPainter(self) painter.setPen(QtCore.Qt.red) painter.drawEllipse(self.center, 110, 110) QtWidgets.QMainWindow.paintEvent(self, event) import sys app = QtWidgets.QApplication(sys.argv) w = MainWindow() w.show() sys.exit(app.exec_()) 方法,然后得到了这个并且现在卡住了:

cycle

这不起作用,因为Ruby显然没有(陈述的)能够知道def adjacentElementsProduct(inputArray) outArray = inputArray.cycle(inputArray.length){|num| num[0] * num[1]}.to_a return outArray.max end num[0]是什么。

例如:

num[1]

因为adjacentElementsProduct([3, 6, -2, -5, 7, 3]) => 21 是所有数字相乘时的最大产品。

1 个答案:

答案 0 :(得分:4)

您可以找到两个最大的值。没有必要尝试每种组合:

[3, 6, -2, -5, 7, 3].max(2).inject(:*)
#=> 42

如果您仍想使用组合,请使用combination方法:

[3, 6, -2, -5, 7, 3].combination(2)
                    .map { |f, s| f * s }
                    .max
#=> 42

如果您想要找到最大的逐个值,请使用each_cons

[3, 6, -2, -5, 7, 3].each_cons(2)
                    .map {|f, s| f * s }
                    .max
#=> 21

另外,

max_by {|f, s| f * s }.inject(:*)

可以替代使用,但它取决于你。