我试图制作一个随机三项式生成器,我希望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 - 随机数始终相同,我该如何改变?
试试这个:
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将字符串连接起来并将其作为一个参数传递。
这是我对查尔斯建议的尝试:
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.");
我最后简化了逻辑,但它应该是一样的。