从一堆随机数中识别出最大值

时间:2016-01-03 18:32:23

标签: javascript

小提琴:https://jsfiddle.net/zhaem/po12voLL/1/

我写了一个脚本,让我具体说明我要显示的随机数的数量,以及这些数字中的任何一个的最大值。像这样:

var randomLimit = 100000
var numberCount = 20
var counter = 0;

document.write("<h1>" + numberCount + " random numbers. Max value of " + randomLimit + "</h1>" );

function randomNumber(limit) {
    return Math.floor( Math.random() * limit ) + 1;
  }

while ( counter < numberCount ) {
  document.write(randomNumber(randomLimit) + "<br>");
  counter++;
}

我正在试图弄清楚如何评估所有这些数字并确定最大数字(并使该行项目加粗)。

我尝试通过检查当前的“randomNum”是否大于其他的来实现,但是不起作用并且看起来似乎不是正确的方法,因为它似乎需要等待所有数字在选择最大之前生成?会喜欢任何想法。

while ( counter < numberCount ) {
  var randomNum = randomNumber(randomLimit)
  if (this.randomNum > randomNum) {
    document.write("<strong>" + randomNum + "</strong>" + " ");
  } else {
    document.write(randomNum + " ");
  }
  counter++;
}

3 个答案:

答案 0 :(得分:3)

您可以拥有一个跟踪最大数字的变量,如果当前数字大于最大数字,则更新它。当您完成生成所有随机数时,找到该数字并加粗。

&#13;
&#13;
var randomLimit = 100000
var numberCount = 20
var counter = 0;
var largestNumber = -1;

document.write("<h1>" + numberCount + " random numbers. Max value of " + randomLimit + "</h1>" );

function randomNumber(limit) {
    return Math.floor( Math.random() * limit ) + 1;
  }

while ( counter < numberCount ) {
  var currNumber = randomNumber(randomLimit);
  document.write("<span>" + currNumber + "</span><br>");
  if (currNumber > largestNumber)
    largestNumber = currNumber;
  counter++;
}

var list = document.getElementsByTagName("span");
for (var i = 0; i < list.length; i++) {
  if (list[i].innerHTML == largestNumber) {
    list[i].innerHTML = "<strong>" + largestNumber + "</strong>";
  }
}
&#13;
<body>
	<div id="layer1">

	</div>
	<script src="randomNum.js"></script>
</body>
&#13;
&#13;
&#13;

答案 1 :(得分:1)

生成数组中的所有数字,找到最大值,然后将其全部写入此代码中。

这不是最好的解决方案,因为它需要在数组上进行3次迭代(一次用于生成,一次用于查找最大值,最后一次用于打印数字)但我认为很清楚,而且我总是犯错误对性能的可读性。

你不能用少于2次迭代解决这个问题,因为你永远不知道下一个值(随机)是否会比前一个更大。

var randomLimit = 100000
var numberCount = 20
var counter = 0;

document.write("<h1>" + numberCount + " random numbers. Max value of " + randomLimit + "</h1>" );

function randomNumber(limit) {
    return Math.floor( Math.random() * limit ) + 1;
}

// Generate random numbers
var randomNumbers = []
for( counter = 0; counter < numberCount; counter++ )
  randomNumbers.push(randomNumber(randomLimit))

// Find max value
var maxValue = Math.max.apply(this, randomNumbers)

// Write values
randomNumbers.forEach(function(value) {
  str = value;
  if(value == maxValue) str = "<strong>" + value + "</strong>";
  document.write(str + "<br />");
})

答案 2 :(得分:0)

根据您的应用程序,以及您认为可以从较高的集合生成大数字并随机插入它的懒惰程度。不是随意的。

否则,Mozilla开发者网络会说使用Math.max.apply或传播运营商&#39;。按示例传播运算符。

var randomNums = []

while ( counter < numberCount ) {
  randomNums.push(randomNumber(randomLimit));
  counter++;
}

var maxIs = Math.max(...randomNums), i;

for (i=0; i<numberCount; ++i) { 
  var num = randomNums[i];
  if (num == maxIs) {
     document.write('<b>' + num  + '</b><br/>');
  } else {
    document.write(num + '<br/>')
  }
}