Javascript 最大三位数的总和

Javascript greatest sum of triple digits

本文关键字:三位数 Javascript      更新时间:2023-09-26

我想用javascript编写一个函数,它计算给定正数的3个连续数字的最大和。

例如,124999012计算 27。

我已经编写了一个计算数字数字之和的函数:

function sumDigits(n)
{
    var str = n.toString();
    var result = 0;
    for(var i = 0; i < str.length; i++)
    {
        result = result + parseInt(str.charAt(i));
    }
    return result;
 }

我有点无聊,所以我也做了自己的算法。这是我的解决方案:

function sumDigits(n) {
  return Math.max.apply(null, Array.prototype.map.call("" + n, function (s, ix) {
    return [+s, +n.toString()[ix + 1], +n.toString()[ix + 2]]
      .reduce(function (prev, curr) { return prev + (curr || 0) });
  }));
}

当然,还有小提琴。

循序渐进:

1) 将数组转换为三个元素的数组,当前元素和接下来的 2 个元素:

Array.prototype.map.call(n.toString(), function (s, ix) {
  return [+s, +n.toString()[ix + 1], +n.toString()[ix + 2]];
});

2) 获取数组中每个项目的三个元素的总和:

item.reduce(function (prev, curr) { return prev + (curr || 0) });

对于数组的最后一个元素,curr将未定义,因此可以将其转换为 0

3) 获取最后一个数组的max

Math.max.apply(null, array);

就是这样!

你可以做这样的事情:

function sumDigits(number)
{
    var numberString = "" + number;
    var max = -1;
    for(var i = 0; i < numberString.length - 3; i++)
    {
        var number1 = parseInt(numberString.charAt(i));
        var number2 = parseInt(numberString.charAt(i + 1));
        var number3 = parseInt(numberString.charAt(i + 2));
        var tempTotal = number1 + number2 + number3;
        if(tempTotal > max)
        {
            max = tempTotal;
        }
    }
    window.alert("" + max);
    return max;
}

您可以从前三位数字开始并循环播放,直到您测试了 3 个连续数字的每个组合。 只需将 3 个数字相加,如果它大于当前最大值,则将当前最大值设置为温度值。

你会想要这样的东西,它使用Array.spliceMath.max

function highestNum(n){
  var arr = [], nArr = (n+"").split("");
  while(nArr.length > 0)
     arr.push(nArr.splice(0,3).reduce(function(t, c){ return +t + +c }, 0));
  return Math.max.apply(null, arr);
}

它所做的是,首先它将数字转换为字符串,然后使用 Array.splice ,您将数组拆分为 3 个元素的片段,然后使用 Array.reduce 获取您在另一个数组中推送的这三个数字的总和。然后使用 Math.maxFunction.apply 来获取使用 return 运算符返回的最大值。

function sumDigits(n)
{
    var str = n.toString();
    var result = 0;
    var temp=0;
    //for safety check length of the string
    // if it is not longer than 3 characters then just sum them up and return
    if (str.length<=3)
    {
      for(var i = 0; i < Math.Min(3,str.length); i++)
         result += parseInt(str.charAt(i));
    }
    else
    {
      //now look for biggest 3 consecutive numbers,
      //you wanna sum up 3 digits starting at index 0, and compare it with the max value you have calculated so far
      for(var i = 0; i < str.length-3; i++)
      {
          //calculate the sum of 3 consecutive numbers starting at index i
          temp = parseInt(str.charAt(i)) + parseInt(str.charAt(i+1)) + parseInt(str.charAt(i+2));
          //compare it to the current max, if it is greater than the current max, set it as the result
          if (temp>result)
              result = temp;
      }
    }
    return result;
 }

这可能是正则表达式可以正常工作的情况。我不是正则表达式专家,有人可能会指出这样做的地板?

爪哇语

var num = 12224999011112,
    matches = num.toString().match(/(.)'1{2}/g),
    sum = 0;
if (matches) {
    sum = Math.max.apply(null, matches).toString().charAt() * 3;
}
document.body.appendChild(document.createTextNode(sum));

首先,将数字转换为字符串,以便您可以使用正则表达式。然后,我们匹配具有 3 个并发字符的所有实例。如果我们有任何匹配项,那么我们选择数学上最大的。我们将其转换为字符串,取第一个字符并将其乘以 3。