你好,通过乐透生成器代码,我在一个“生成”周期中将一些数字加倍。这是代码:

function lottery() {
    for (var i=0; i<=7; i++) {
        var lottery = Math.floor(Math.random() * 49);
        document.getElementById ("lotto" + i).innerHTML = lottery;
    }
}


谁知道问题出在哪里?谢谢!

最佳答案

只是为了好玩:O(N)解决方案(其他发布的是O(N^2)

它使用Fisher-Yates shuffle algorithm,然后在对第一个7元素进行混洗后,将其照原样处理。

因此,无需检查是否已绘制任何数字:

const arr = Array(50).fill(0).map((_, i) => i);
const DRAW = 7;

const rand = (from, to) => Math.floor(Math.random() * (to - from + 1)) + from;

for (let i = 0; i < DRAW; ++i) {
  const r = rand(i, arr.length - 1);
  [arr[r], arr[i]] = [arr[i], arr[r]];
}

const selected = arr.slice(0, DRAW);


参考文献:


Online demo

关于javascript - 乐透发生器javascript,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33468028/

10-12 12:59