C++ 随机RPG统计生成

C++ 随机RPG统计生成,c++,random,C++,Random,我正在进行一个个人项目,为桌面RPG(如D&D)开发一个统计生成器。我需要生成的数字满足以下标准: 数字必须在1和d(模具尺寸)之间 n个随机数之和必须始终为(d+1)n\2 例如,如果d=20,n=6,则总和应为S=63,随机数应介于1和20之间。这意味着平均产出大约为[10,11,10,11,10,11] 用常数和生成数字的问题,我很熟悉在一定范围内生成数,但是我想知道是否有一个简单的算法保证了这两个标准都得到满足。< /P> < P>我将提供伪代码,因为在工作职责中从C++切换到JS,

我正在进行一个个人项目,为桌面RPG(如D&D)开发一个统计生成器。我需要生成的数字满足以下标准:

  • 数字必须在1和d(模具尺寸)之间
  • n个随机数之和必须始终为(d+1)n\2
例如,如果d=20,n=6,则总和应为S=63,随机数应介于1和20之间。这意味着平均产出大约为[10,11,10,11,10,11]


用常数和生成数字的问题,我很熟悉在一定范围内生成数,但是我想知道是否有一个简单的算法保证了这两个标准都得到满足。< /P> < P>我将提供伪代码,因为在工作职责中从C++切换到JS,我很生锈。 这里的想法是,我们在每个统计数据中随机分配各个点

d = 20;
n = 6;
stats = [1, 1, 1, 1, 1, 1];

sum = (d+1)n\2 - n;

int i = 0;
while(i < sum)
{
    // Assuming rand(0,5) produces integer values in range [0..5]
    r = rand(0,5);
    if(stats[r] < 20)
    {
        stats[r]++;
        i++;
    }
}
d=20;
n=6;
统计数据=[1,1,1,1,1,1];
总和=(d+1)n\2-n;
int i=0;
而(i
也许dupe:我相信你在找这个?你能举一个例子说明你想做什么和你实际上得到了什么吗?你知道统计上n边掷骰子总数的平均值是d*(n+1)/2,而不是d*n/2吗?我这样问是因为我怀疑你的求和条件与此有关。@Thebluefish我会尝试一下。请将此作为答案发布。请将此作为答案发布,实际实现肯定更好。@Bob_uu_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_。检查位置一次,如果低于,则增加一次。该答案不考虑第一个约束@SeverinPapadeux的代码似乎更正确。请将此作为答案发布!或者蓝鱼会更新你的答案以包括测试内容。@CrisLuengo捕得好。我已经相应地更新了伪代码。我仍然相信实际可用代码的作者应该写一个正确的答案。实际上,我已经提出了一个代码示例(这就是这个问题的内容)。链接是。需要反馈。