我需要一个像int f(int min, int max, int x, int chance)// where accepted chance values are 0 to 100 and x values are min to max
返回等于或大于min
,小于或等于max
的随机整数,结果的chance
%概率等于x
,并且100-chance
%概率均匀地分布在给定范围内的所有其他结果中。
我的解决方案是创建一个包含100个单元格的数组,将其填充为符合域的随机非x
等于数字,将chance
个数字放入x
等于值,并获取一个随机单元格的值。但是我相信应该有一个受过良好教育的开发人员可以建议的更好的解决方案。你是否可以?
最佳答案
Random r = new Random();
if (r.Next(100) >= chance)
return x;
var tmp = r.Next(min, max); // take one less than max to "exclude" x
if (tmp >= x) // shift up one step if larger than or equal to the exceluded value
return tmp + 1;
return tmp;
可能在某处被一个错误抵消