创建一个javascript数组(N),该数组由连续的较小整数组成,其和为1000
create javascript array(N) of consecutively smaller integers with the sum of 1000
我正在开发一款基于文本的掷骰子游戏,我需要生成一个由N个概率值组成的数组,每个连续值都比之前的值小(更罕见),总和等于1000。1000是重要的,因为在其他地方我有概率<1%。
该函数使用数组生成加权随机索引:概率为所讨论的数组
function rndProb(probability)
{
chances = new Array();
for(var x=0; x<probability.length ; x++)
{
for(var y=0; y<probability[x]; y++)
{
chances.push(x);
}
}
var px = Math.floor(Math.random() * chances.length+1);
return chances[px];
}
我意识到这个功能效率不高,但它只需要运行几次,所以性能并不重要。我需要它是动态的,这样我就可以更改列表中的项目数量,但所有添加的项目都等于1000即:
var rankProb = [400,310,160,100,25,5];
类似的东西
function probGen(arrayLength)
{
for(var i=0;i<arrayLength;i++)
{
prob.push(((1000-arrayLength)/arrayLength)+1);
}
return prob;
}
我就是想不通这个公式。
从算术序列1、2、…开始。。。,N。这个序列的和是S=N*(N+1)/2。我们可以很容易地将序列的每个成员乘以1000/S,得到一个总和为1000的序列。(因为你需要整数,所以会有一个余数,我们可以把它加到最大值上。)
在Javascript中:
function probGen(arrayLength)
{
var prob = [];
var sum = arrayLength * (arrayLength + 1) / 2;
var multiplier = Math.floor(1000 / sum);
var remainder = 1000 - (sum * multiplier);
if (sum > 1000) { return null; } // error case
for (var i = arrayLength ; i > 0 ; i--)
{
prob.push(i * multiplier);
}
prob[0] += remainder;
return prob;
}
解决了它!虽然让我头疼。。。
function generateProbs(arrayLength)
{
var prob = new Array();
var diff = 1;
for(var d=2;d<arrayLength+1;d++)
{
diff = diff + d;
}
var offset = (1000/diff);
for(var i=arrayLength;i>0;i--)
{
prob.push(Math.round(offset*i));
}
return prob;
}
相关文章:
- Js char数组将字符串整数视为整数
- 如何在JavaScript中剥离数组元素中的非整数
- 如何删除“;整数“;JavaScript中对象的数组
- 效率:整数数组的一个子集中两个项之间的最大差值
- 在JS中返回数组的大整数运算
- 创建一个javascript数组(N),该数组由连续的较小整数组成,其和为1000
- 包含整数(秒)和 setTimeout() 的数组
- 在参数数组中传递整数数组
- 将整数数组从插件传递到JavaScript
- Javascript-如何快速构建不同正整数数组的二进制表示
- 将随机整数分配给数组中的项,summa应该是一个固定的数字
- 在JavaScript中,是否使用数组's的length属性生成整数数学
- 函数来检查给定整数数组中给定位置的元素是否大于其两个邻域
- 如何将整数数组转换为人力车的 x/y 坐标
- parseInt() 不会将数组的每个数组元素转换为整数
- 角度 - 数组从承诺更新,整数不更新
- 如何用整数“平滑”数组
- 用于从包含最大求和的整数数组中提取子数组的算法
- 在 JQuery 中将整数数组转换为字符串数组
- 在angular中使用json数组整数