js中的迭代函数

时间:2017-07-28 19:07:48

标签: javascript

您好每个人都想用javascript和es6来解决这个问题,问题是什么 如果我有一个类似[1,2,3,4]的数组,所以我想检查下面的每个概率,并返回最大的数字

1--> (1*2) + (3*4) = 14
2--> (1*3) + (2*4) = 11
3--> (1*4) + (2*3) = 10

那么最大的数字是14作为返回结果--->我如何使用函数来做到这一点,并记住如果数组有100个数字我怎么能动态地做99个概率 注意:也许数组没有排序,它甚至可能是奇怪的,甚至谢谢你

3 个答案:

答案 0 :(得分:1)

将最大数字相乘得到的总和大于将大数与低数相乘然后将它们相加(比较给定圆周方形是具有最大表面积的矩形)。因此,只需要计算[0]*[1] + [2]*[3] + [4]*[5] + ... (假设数组长度是偶数):

const array = [4,2,1,3].sort();
let sum = 0;
for(let i = 1; i < array.length; i += 2)
  sum += array[i - 1] * array[i];

编辑:对于从1开始的连续数字的计算,甚至不需要JS,总和的封闭形式是1/3 * (n - 1)(4*n² - 5*n)(n是最大(偶数)数字)。

答案 1 :(得分:0)

我同意斯蒂芬的观点,将相对最大的数字乘以一个较大的总和,而不是将一个较大的数字与一个较小的数字相乘,然后将它们相加。而且你应该将数组中的连续数字乘以(1 * 2)+(3 * 4)+(5 * 6)+ ... +(99 * 100)等。

答案 2 :(得分:0)

您不需要所有组合。 在数学上,您将始终通过乘以最高可用数字来获得最高值。 因此,将高数字乘以除第二高数字之外的任何数字都是毫无意义的。

const arr = [4, 3, 2, 5, 6, 7]
let sum = arr.sort().reduce((sum, val, idx) => sum += (idx % 2 !== 0) ? arr[idx - 1] * arr[idx] : 0 , 0)
相关问题