随机可分为c#中两个整数中的至少一个

时间:2016-01-24 14:02:00

标签: c# random

我有一个整数,我想通过使用Random来赋值。 随机选择的数字必须可以除以2或5(或两者)。 如果只能将两个除数,我只需乘以随机结果* 2,但这里不是一个选项。

怎么做?

编辑: 我提出了这个代码,但它可能效率很低:

static void Main(string[] args)
        {
            int[] tab = new int[5];
            Random random = new Random();
            int i = 0;
            while (i < tab.Length)
            {
                int tempInteger = random.Next(101);
                if (tempInteger % 2 == 0 || tempInteger % 5 == 0)
                {
                    tab[i] = tempInteger;
                    i++;
                }
            }
        }

5 个答案:

答案 0 :(得分:3)

如下:

void Main()
{
    var xs = new[] { 2, 5 };
    var rand = new Random();

    var r = xs[rand.Next(0, xs.Length)] * rand.Next(SOME_UPPER_BOUND);
}

我们的想法是首先选择2或5,然后将该选项乘以0和SOME_UPPER_BOUND之间的任意数字。

我使用SOME_UPPER_BOUND = 101对其进行了测试,并且凭经验r可以被2,5或10整除。

如果您希望等于可分性概率为2,或两者(即10),则将第一行更改为var xs = new[] {2, 5, 10}

答案 1 :(得分:2)

在问题中没有明确表达,但我希望每个结果编号以相同的概率生成。 @RodrickChapman建议的解决方案效果很好但是例如数字10将在结果中出现两次,而不是数字6.由于事实,10可以生成为2*5,也可以生成{ {1}}但是号码6只能生成为5*2

首先让我们进行简单的观察:每个结果编号必须以数字0,2,4,5,6或8结尾。我们需要做的是从这些数字中随机选择并将此数字添加到某些数字中随机数,以0(0,10,20,40,......)结尾。

2*3

答案 2 :(得分:1)

嗯,你总是可以将它乘以10 - 这样它总是可以被2和5整除。

答案 3 :(得分:1)

在这种情况下,我会像这样创建两个随机数。一个是 base 一个,另一个是0到2,它将分别映射到2,5和10的乘法,然后将它们中的两个相乘,如下所示:

Random rand = new Random();
int baseInt = rand.Next(101);
int choiceInt = rand.Next(0, 3);
List<int> mapInts = new List<int>() { 2, 5, 10 };
int finalInt = baseInt * mapInts[choiceInt];

finalInt始终可以被2,5或10整除。

答案 4 :(得分:0)

更好的解决方案是将随机生成的数字乘以2或5。

或者您可以生成可分割的数字数组,并通过随机生成的索引从数组中随机选择它们。