The problem:
掷骰子游戏中6个点数出现的概率是相等的,抛开这个游戏,那么我们想在随机取1~6的整数时,某些整数被取得的概率变大;
The solution:
思路:将一个整数区间[0,n)分为6份,然后从这个区间随机取得某整数x,则x落到每份中的概率为:若每份等长则落到每份的概率都是相等的;若某份较长则x落到该份的概率较大;下面我取区间为[0,36),当然也可取[0,18),[0,24)等等;
code:[C#,Unity3d圣典]
int MyRandom()
{
int [] QuJian = new int[6];
int number = 0;
QuJian[0]=6;//每个数组元素表示该份区间的整数个数;若数组元素都相等表示每份中的整数个数相等,则x落到每份中得概率相等;
QuJian[1]=9;//明显x落到QuJian[1]的概率大于落到QuJian[2]的概率,但所有的数组元素的和为36;
QuJian[2]=3;
QuJian[3]=6;
QuJian[4]=6;
QuJian[5]=6;
int sum_All = 0;
for(int i = 0;i<6;i++)
{
sum_All+=QuJian[i];
}
number = Random.Range(0,sum_All);//随机选择整数x
int sum =0;
for(int i =0 ;i<6;i++)
{
if( number>=sum && number<sum+ QuJian[i])//寻找落到哪个区间
{
number = i+1;
break;
}
sum+=QuJian[i];
}
print("random" + number);
return number;
}
GOOD LUCK!