如何从随机数字集中找到最小值?

时间:2011-08-23 11:19:31

标签: javascript

请参阅http://jsfiddle.net/JPxXp/

我理解为什么我一直得到1作为最小球数;我是否创建了另一个包含6个随机数的变量/数组(如果是,如何 - 我不完全理解如何执行此操作)。

5 个答案:

答案 0 :(得分:2)

首先,定义一个包含随机数的数组:

var random_balls = [];

每次生成随机数时,请将其添加到该数组中:

// generate, the + is to convert a string like '12' to the number 12, otherwise
// comparing them gives wrong results: '12' < '9' but 12 > 9
var random_ball = +balls[Math.floor(Math.random()*balls.length)];

// if indexOf returns -1, the ball is not present in the array
// (otherwise it returns the index at which the ball is)
while(random_balls.indexOf(random_ball) !== -1) {
    // generate again if you already took this ball
    random_ball = +balls[Math.floor(Math.random()*balls.length)];
}

// add to array
random_balls.push(random_ball);

// display
document.write(random_ball);

min checker将使用如下随机数迭代新数组:

for (i=0; i<random_balls.length; i++)
{   if (random_balls[i] < min)
        min = random_balls[i];
}

如果你不知道,你也可以使用:

var min = Math.min.apply(null, random_balls); // use built in min function, passing array as arguments

http://jsfiddle.net/pimvdb/JPxXp/7/

答案 1 :(得分:1)

定义全局最小变量并在选择随机球后更改它:

var min = Number.POSITIVE_INFINITY;

...

for(i=0; i<NUMBER_OF_BALLS; i++) {
    var ball = balls[Math.floor(Math.random()*balls.length)];

    min = Math.min(ball, min);

    document.write(ball);
    document.write("  ");
}

小提琴:http://jsfiddle.net/Daess/JPxXp/4/

循环min变量将保持最小数字。

答案 2 :(得分:1)

实际上,您需要将随机选择的值推送到数组中,并找到该数组的最小WRT。

  document.write("your balls are ");

  NUMBER_OF_BALLS = 6

  var i = 0;
  var balls = ['1','2','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26','27','28','29','30','31','31','32','33','34','35','36','37','39','40'];

  var chosen = [];
  for(i=0; i<NUMBER_OF_BALLS; i++) {
      chosen.push(balls[Math.floor(Math.random()*balls.length)]);
      document.write(chosen[chosen.length-1]);
      document.write("  ");
  }

  document.write("<br>");
  document.write("<br>");

  min = Number.POSITIVE_INFINITY;
  for (i=0; i<chosen.length; i++) {   
    if (chosen[i] < min)
      min = chosen[i];
  }

  document.write("The lowest ball was: " + min);          
  document.write("<br>");

答案 3 :(得分:0)

您从balls数组中取得最小值。您所做的只是从阵列中打印出六个随机元素。你需要创建一个包含6个元素的新数组,将原始数组中的6个随机元素复制到其中,然后得到最小值。还要注意你可以两次获得相同的元素。

答案 4 :(得分:0)

我将采取不同的方式:

var arr = [], // acceptable values
    randomArray = []; // random array

// Create an array of numbers 0 to 45;
for(var i=1; i <=45 ; i++){
  arr.push(i);   
}

// From http://stackoverflow.com/q/962802#962890
function shuffle(array) {
    var tmp, current, top = array.length;

    if(top) while(--top) {
        current = Math.floor(Math.random() * (top + 1));
        tmp = array[current];
        array[current] = array[top];
        array[top] = tmp;
    }

    return array;
}

// Randomly sort the array and take 6
randomArray = shuffle(arr).slice(0,6);

document.write("Random array: " + randomArray + "<br>");
document.write("Minimum value: " + Math.min.apply(Math, randomArray));

示例:http://jsfiddle.net/jonathon/85vEA/

一开始,我从1-45生成我的数字集(而不是你拥有的字符串数组)。然后我使用Fisher-Yates shuffle随机排序(参见另一个问题的链接),为了获得我的6个随机数的子集,我在数组上做了一个切片。

然后可以通过Math.min.apply(Math, randomArray)

找到最小值