Javascript 尝试用一些规则用1到2之间的数字填充9个空格

Javascript 尝试用一些规则用1到2之间的数字填充9个空格,javascript,Javascript,我试图用数字填充9个框,这些数字可以是数字1或数字2,因为数字2只能是4次,数字1应该填充剩下的5次。。。我知道这是一个简单的逻辑问题,但在某种程度上我无法达到我的目标。。。看看我的代码 <script type="text/javascript"> for (cicloTipo = 1; cicloTipo < 10; cicloTipo++) { var tipo = Math.floor((Math.random() * 2

我试图用数字填充9个框,这些数字可以是数字1或数字2,因为数字2只能是4次,数字1应该填充剩下的5次。。。我知道这是一个简单的逻辑问题,但在某种程度上我无法达到我的目标。。。看看我的代码

    <script type="text/javascript">
        for (cicloTipo = 1; cicloTipo < 10; cicloTipo++) {
            var tipo = Math.floor((Math.random() * 2) + 1);
                document.write(tipo);
        }
    </script>

对于(cicloTipo=1;cicloTipo<10;cicloTipo++){
var tipo=数学地板((数学随机()*2)+1);
文件编写(tipo);
}

这里有一个解决方案,可以确保链中不超过4个2。 这意味着数字链可以包含从0 2到4 2的数字,其余为1

//2s计数器
var c1=c2=0;
对于(变量cicloTipo=1;cicloTipo<10;cicloTipo++){
var tipo=数学地板((数学随机()*2)+1);
//检查是否遇到了2和4 2s
如果(tipo==2){
如果(c2<4){
//增量计数器
c2++;
}否则{
tipo=1;
c1++;
}
}
//检查是否为1,是否遇到5个1
否则如果(tipo==1){
如果(c1<5){
//增量计数器
c1++;
}否则{
tipo=2;
c2++;
}
}
文件编写(tipo);

}
您可以从所需值的数组开始,然后洗牌该数组或从中随机选择值。有人说Math.random并不是真正的随机,但它应该足够好

下面使用splice来选择值,因此循环会向后迭代,因为每次拼接都会缩短源数组

函数getRandoms(){ 对于(var seed=[1,1,1,1,1,2,2,2],result=[],i=seed.length;i;i--){ result.push(seed.splice(Math.random()*i | 0,1)[0]); } 返回结果; } //显示结果的随机性 (功能(){ var s=新数组(30).fill('+'); var-r; 对于(变量i=9;i;){ document.getElementById(-i).textContent=s.join(“”); } var j=300;//运行次数 var delay=20;//默认延迟(毫秒) 功能显示(滞后){ 延迟=延迟| |延迟; getRandoms().forEach(函数(v,i,rand){ var el=document.getElementById(i); 如果(v==1){ el.textContent=el.textContent.slice(0,-1); //如果用完“+”,请在每行中添加一些 如果(!el.textContent.length){ 对于(var k=0;k<9;k++){ document.getElementById(k).textContent+='++'; } } }否则{ el.textContent+='+'; } 如果(i==0){ document.getElementById('msg').innerHTML='Remaining:'+j+ “
”+”值:“+rand.join(”); } }); --j; 如果(j>0){ 设置超时(显示、延迟); } } 显示器(50); }()); //单次呼叫 //log(getRandoms().join())










您具体遇到了哪些问题?数字生成(最多4个2和5个1)或写入框?只需定义一个包含4个
2
s和5个
1
s的数组,并在其上执行一个…或只是从数组中随机拼接值。不过,您不限制1的数量。