【问题标题】:how to set up random number generation without remainder?如何设置没有余数的随机数生成?
【发布时间】:2021-05-10 09:02:53
【问题描述】:

如何设置生成器的除法随机数以仅列出除法后没有余数的数字?我只需要一位数字。

我试过了:

 Random druhy = new Random();
            Random prvni = new Random();
            
            int maxprvni = 10;
            int maxdruhy = 10;
            
            int prvnic = prvni.Next(1, maxprvni);
            int druhyc = druhy.Next(2, maxdruhy);
...
if (znamenko.Text == "/")
            {
                int zbytek = (prvnic % druhyc);
                if (zbytek == 0)
                {
                    int total = (prvnic / druhyc);
                    prvnit.Text = prvnic.ToString();
                    druhyt.Text = druhyc.ToString();
                    vysledek.Text = total.ToString();
                }

            }

这不会向我的计算器写入任何数字,因为它有一个数字余数。

我可以在 ELSE 中写什么来生成另一个数字,依此类推,直到这个数字完全消失?

【问题讨论】:

  • 如果您只想生成除法后没有余数的数字,为什么不只生成一组较小的数字并乘以druhyc。这似乎是一种很好的保证方式。
  • 如果该数字必须能被druhyc整除,那么您需要做的就是为druhyc生成一个随机数,然后生成另一个随机数并乘以druhyc并分配结果到prvnic
  • @MatthewWatson 是的,它会起作用,但我只需要一个数字

标签: c# random


【解决方案1】:

您可以生成除数的随机倍数,而不是生成要除的随机数。

// Generate a random divisor, which could be anything except 0
int druhyc = druhy.Next(2, maxdruhy);

// Generate a random multiple of `druhyc`
// Ensure that it does not exceed maxprvni
int prvnic = druhyc * prvni.Next(1, maxprvni / druhyc);

// The division now has no remainder:
int total = (prvnic / druhyc);

通过除以maxprvni / druhyc,保证生成的随机数在乘以druhyc时不会超过maxprvni

Working example

【讨论】:

  • 是的,没错,但我只需要一位数字
  • @memberstack 哪个数字需要是个位数? total?
  • prvnicdruhyc,但如果我为循环 4 设置最大值,那么即使数字足够简单,可以进行加减运算,它也应该可以工作
  • @memberstack 但prvnicdruhyc 都将是个位数,因为您已将(独占)最大数字设置为 10。
  • 实际上,当我给出第二个数字必须是个位数但我将它与它相乘时,这不是真的,所以第一个数字绝对不必是个位数
猜你喜欢
  • 2012-12-03
  • 1970-01-01
  • 1970-01-01
  • 2016-08-07
  • 1970-01-01
  • 2014-09-20
  • 2021-06-01
  • 1970-01-01
相关资源
最近更新 更多