如何从两个不同的范围生成随机数?
例如: 10-20和50-60中的一个数字。
我知道如何从一个范围(1-13)生成随机数:
Random rnd = new Random();
int num = rnd.Next(1, 13);
发布于 2015-11-13 05:14:41
int num = rnd.Next(1, 3)==1 ? rnd.Next(10, 21) : rnd.Next(50,61);
或
int num = rnd.Next(10, 32);
if (num>20) num+=29;
或者只是为了好玩(不要在大范围内使用,而且运行起来也很慢):
var ranges=new []{ Tuple.Create(10,20), Tuple.Create(50,60)};
var rnd=new Random();
var possible=ranges.Select(x=>Enumerable.Range(x.Item1,x.Item2-x.Item1+1))
.SelectMany(x=>x)
.Distinct();
var num=possible.Skip(rnd.Next(0,possible.Count())).First();
发布于 2015-11-13 05:14:55
记住,对于下一个方法,下限是包含的,而上限是独占的。这样如何:
var rand = new Random();
var num1 = rand.Next(10, 21);
var num2 = rand.Next(50, 61);
var myNum = rand.Next(0, 2) == 1 ? num1 : num2;
发布于 2015-11-13 05:17:07
您将生成22个不同的随机数,10-20和50-60。所以首先要做的就是:
int randomNumber = rnd.Next(0, 22);
现在,你有了从0到21的随机数。
添加十个:
randomNumber += 10;
现在,你有10到31之间的随机数。
将所有数字加上29 >= 21:
if (randomNumber >= 21) {
randomNumber += 29;
}
现在,你有从10到20,从50到60的随机数。
https://stackoverflow.com/questions/33681387
复制相似问题