C 不同权重的随机分布规划
我要说的第一件事是,这类问题可能有一个名字,我只是不知道它的名字 解释如下: 有8个球槽和100个球随机分布在槽之间。有3种不同类型的插槽:红色、绿色和蓝色。红色插槽类型必须至少总共有6个球,绿色15个和蓝色不重要 除了每种不同颜色所需的数量外,还可能有多个红色、绿色或蓝色插槽,每个插槽都有相同比例的球进入其中。红色是4%,绿色是15%,蓝色是其余未采摘的 所以随机建议一个序列这是一种可能性:C 不同权重的随机分布规划,c,algorithm,random,pseudocode,C,Algorithm,Random,Pseudocode,我要说的第一件事是,这类问题可能有一个名字,我只是不知道它的名字 解释如下: 有8个球槽和100个球随机分布在槽之间。有3种不同类型的插槽:红色、绿色和蓝色。红色插槽类型必须至少总共有6个球,绿色15个和蓝色不重要 除了每种不同颜色所需的数量外,还可能有多个红色、绿色或蓝色插槽,每个插槽都有相同比例的球进入其中。红色是4%,绿色是15%,蓝色是其余未采摘的 所以随机建议一个序列这是一种可能性: Slot 1 - Blue with 17 balls Slot 2 - Green with 8 b
Slot 1 - Blue with 17 balls
Slot 2 - Green with 8 balls
Slot 3 - Green with 12 balls
Slot 4 - Red with 1 ball
Slot 5 - Blue with 33 balls
Slot 6 - Red with 7 balls
Slot 7 - Blue with 12 balls
Slot 8 - Green with 10 balls
请注意,所需的数量已经填满,并且还有多个红色和绿色插槽,尽管它只需要一个(至少有一个球在里面)
我需要的是一个伪代码或任何语言的代码,显示如何在不同的插槽和不同的权重之间分配所有100个球。我一直在为它编程,但每3分一次,就有一次没能分配到每一个球,它错过了一些
--编辑:
我用C#编写的代码的草图(这只是彩色插槽生成):
int-amountofreeslots=0,amountOfGreenSlots=0,amountOfBlueSlots=0;
int[]slotColors=新int[8]//1-红色,2-绿色,3-蓝色;
对于(int i=0;i<8;i++)
{
int num=Random.Range(1011);
如果(num类似的东西可以工作,那么这是一个快速代码,因此可能会有一两个错误。请注意您所说的内容,尽管当前布局存在较低的可能性,但您可能会超过要分发的球数。例如:6个绿色和2个红色
这是密码
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
enum types{RED=1,BLUE,GREEN};
typedef struct
{
int color;
unsigned int number_balls;
}slot_t;
#define NUM_SLOTS 8
#define GREEN_PROBABILITY 15
#define RED_PROBABILITY 4
#define MINIMUM_RED 6
#define MAX_NUMBER_BALLS 100
int main(void)
{
slot_t slots[NUM_SLOTS];
int slots_created,random_number;
int ball_count=0;
srand(time(NULL));
for(slots_created=0;slots_created<NUM_SLOTS;slots_created++ )
{
random_number=rand()%100+1;//random value between 1-100
if(random_number<=RED_PROBABILITY){
slots[slots_created].color=RED;
slots[slots_created].number_balls=MINIMUM_RED;
ball_count+=MINIMUM_RED;
}
else if(random_number<=GREEN_PROBABILITY+RED_PROBABILITY)
{
slots[slots_created].color=GREEN;
slots[slots_created].number_balls=MINIMUM_RED;
ball_count+=MINIMUM_RED;
}
else if(random_number<=GREEN_PROBABILITY)
;//blue case
}
while(ball_count<MAX_NUMBER_BALLS)
{
slots[rand()%NUM_SLOTS].number_balls+=1; //add one ball
++ball_count;
}
}
#包括
#包括
#包括
枚举类型{RED=1,BLUE,GREEN};
类型定义结构
{
内色;
无符号整数球;
}槽t;
#定义NUM_插槽8
#定义绿色概率15
#定义红色概率4
#定义最小的红色6
#定义最大球数为100
内部主(空)
{
插槽t插槽[插槽数量];
创建int槽,随机数;
int ball_count=0;
srand(时间(空));
对于(slot_created=0;slot_created这样的代码应该可以工作,这是一个快速代码,因此可能会有一两个错误。请注意您所说的内容,尽管当前布局存在很低的可能性,但您可能会超过要分发的球数。例如:6个绿色和2个红色
这是密码
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
enum types{RED=1,BLUE,GREEN};
typedef struct
{
int color;
unsigned int number_balls;
}slot_t;
#define NUM_SLOTS 8
#define GREEN_PROBABILITY 15
#define RED_PROBABILITY 4
#define MINIMUM_RED 6
#define MAX_NUMBER_BALLS 100
int main(void)
{
slot_t slots[NUM_SLOTS];
int slots_created,random_number;
int ball_count=0;
srand(time(NULL));
for(slots_created=0;slots_created<NUM_SLOTS;slots_created++ )
{
random_number=rand()%100+1;//random value between 1-100
if(random_number<=RED_PROBABILITY){
slots[slots_created].color=RED;
slots[slots_created].number_balls=MINIMUM_RED;
ball_count+=MINIMUM_RED;
}
else if(random_number<=GREEN_PROBABILITY+RED_PROBABILITY)
{
slots[slots_created].color=GREEN;
slots[slots_created].number_balls=MINIMUM_RED;
ball_count+=MINIMUM_RED;
}
else if(random_number<=GREEN_PROBABILITY)
;//blue case
}
while(ball_count<MAX_NUMBER_BALLS)
{
slots[rand()%NUM_SLOTS].number_balls+=1; //add one ball
++ball_count;
}
}
#包括
#包括
#包括
枚举类型{RED=1,BLUE,GREEN};
类型定义结构
{
内色;
无符号整数球;
}槽t;
#定义NUM_插槽8
#定义绿色概率15
#定义红色概率4
#定义最小的红色6
#定义最大球数为100
内部主(空)
{
插槽t插槽[插槽数量];
创建int槽,随机数;
int ball_count=0;
srand(时间(空));
对于(slots\u created=0;slots\u created能否显示您当前尝试的代码?堆栈溢出不是一种代码编写服务。我确实理解您的说法,我说过代码需要,但我真正需要的只是一些解决方案的指导,也许是一些步骤。我编写的代码有200多行,非常不优化。我不理解关于多个红色和绿色插槽类型的要求。必须有一个红色插槽,因此插槽为红色的概率必须至少为12.5%,这远远超过4%。我不明白您从中提取了12.5%,但解释是:因为红色插槽中至少需要6个球,所以必须至少有一个,但not必须是唯一的。你能展示你目前尝试过的代码吗?堆栈溢出不是一种代码编写服务。我确实理解你的说法,我说过需要代码,但我真正需要的只是一些解决方案的指导,也许是一些步骤。我编写的代码有200多行,非常不优化。我不理解这些代码关于多个红色和绿色插槽类型的要求。必须有一个红色插槽,因此插槽为红色的概率必须至少为12.5%,这远远超过4%。我不明白您从何处获得了12.5%,但解释是:因为红色插槽中至少需要6个球,所以必须至少有一个,但不是必须只有一个。谢谢你的回答,但要注意一些事情:你没有强制要求红色或绿色的数量,你只是说如果它碰巧产卵,把那么多的球放进去,而且红色/绿色插槽内的球的数量不是强制性的6/15,这个数量是作为红色/绿色插槽内的球总数需要的,不是吗还有一件事,“剩下的”球你只是将它随机放入一个有颜色的槽中,你没有考虑到这个球也有进入一个有颜色槽的速率。谢谢你的回答,但是要注意一些事情:你没有强迫红色或绿色的数量,你只是说如果它碰巧产卵,把那么多的球放进去,还有红色/g中的球的数量reen插槽不是强制要求的6/15,这个数量是作为红色/绿色插槽中的球的总数,而不是单个插槽中的球。还有一件事,“剩余”的球你只是在插槽中随机分配,你没有考虑到球也有进入彩色插槽的速率。