如何使随机数遵循某些自定义规则?

问题描述 投票:1回答:2

我试图制作一个随机三项式生成器,我希望2个随机数遵循三项式规则(num1 + num2 = b)(num1 * num2 = c)

string a = "x²";
int b = new Random().Next(-50, 50);
int c = new Random().Next(-50, 50);
Console.WriteLine(a,b,c);
while (true)
{
  int num1 = int.Parse(Console.ReadLine());
  int num2 = int.Parse(Console.ReadLine());
  if ((num1 + num2 == b) && (num1 * num2 == c))
  {
    Console.WriteLine("Correct.");
    break;
  }
  else
  {
    Console.WriteLine("Wrong. Try again");
  }
}

我希望写下这些数字,但事实并非如此。另外,我不知道如何使随机数遵循这些规则。 PS - 随机数始终相同,我该如何改变?

c# random
2个回答
1
投票

试试这个:

string a = "x²";
var randomGenerator = new Random();
int b = randomGenerator.Next(-50, 50);
int c = randomGenerator.Next(-50, 50);
Console.WriteLine("{0},{1},{2}", a, b, c);

bool isRunning = true;
while (isRunning)
{
    int num1 = int.Parse(Console.ReadLine());
    int num2 = int.Parse(Console.ReadLine());
    if ((num1 + num2 == b) && (num1 * num2 == c))
    {
        Console.WriteLine("Correct.");
        isRunning = false;
    }
    else
    {
        Console.WriteLine("Wrong. Try again");
    }
}
Console.ReadLine();

说明:

首先是随机问题。随机生成数字并非真正以随机方式计算,而是计算它们。因此,由于它是一种算法,因此每次尝试都会起作用。为了解决这个问题,随机播种当前时间,然后改变算法的输出。在你的情况下,你创建2个随机对象,但它们将生成得如此之快,以至于它们实际上都是同一时间播种,因此计算相同的“随机”数字。这就是为什么在我的解决方案中,我们只创建一个Random对象。

第二:如果你只想将一个字符串写入控制台,jus将字符串连接起来并将其作为一个参数传递。


1
投票

这是我对查尔斯建议的尝试:

var rand = new Random();
string a = "x²";
int num1 = rand.Next(-50, 50);
int num2 = rand.Next(-50, 50);

int b = num1 + num2;
int c = num1 * num2;

Console.WriteLine($"{a}, {b}, {c}");
while (true)
{
    int guess1 = int.Parse(Console.ReadLine());
    int guess2 = int.Parse(Console.ReadLine());
    if (guess1 == num1 && guess2 == num2)
    {
        break;
    }

    Console.WriteLine("Wrong. Try again");
}

Console.WriteLine("Correct.");

我最后简化了逻辑,但它应该是一样的。

© www.soinside.com 2019 - 2024. All rights reserved.