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!