首页 > 解决方案 > 生成特定范围内的随机数并使用特定数字?

问题描述

如何生成特定范围内的随机数并使用特定数字?

给定数字 [7,8] 的示例;给定范围[100-900];输出必须是其中之一 777、787、788、878、877、888 等...

帮我

const randomGenerateNumber = (maxRange:number, minRange:number, numbers:number[]) => {
 //...what should i do in there??? Help me? Any Idea?
}

标签: javascriptalgorithm

解决方案


我想你不想要随机数。似乎您想要一组基于某些规则的数字。随机意味着别的东西。

如果我很好地理解您的问题,您想生成所有可能的数字,其中仅包含一系列数字中的一组数字。这是一个准确的描述吗?

如果是这样,这与您想要的类似:Generate random numbers only with specific digits

编辑:

你是对的,所以你只想要一个数字。在 javascript 中,您可以执行以下操作:

我编辑了算法,以可能最懒惰的方式考虑了最小值和最大值。我没有考虑无法生成数字的情况,它将返回未定义。

有很多方法可以做到这一点。您的算法也可以工作,并且可能更有效,但它似乎有 0 的问题,即使它不在数字数组中,它也会生成 0 的数字。

function randomGenerateNumber(minRange, maxRange, digits){
    
    noTries = 0;
    while(noTries++ < 100000)
    {
        
        var num = 0;    
        //get a random number from your range
        len = Math.floor(Math.random() * (maxRange - minRange) + minRange);
        //get the lenght of that random number
        len = len.toString().length;
        
        //generate a number with that length using only your set of digits
        while(len--)
        {
            num = num * 10 + digits[Math.floor(Math.random() * digits.length)];                         
        }
        
        if(num >= minRange && num<= maxRange)
        {
            return num;
            break;
        }                   
    }                   
}

//your testing cases
console.log(randomGenerateNumber(100,900,[7,8]))
console.log(randomGenerateNumber(299,300,[1,2,3,4,5,6,7,8,9]));

推荐阅读