C# 如何使随机数遵循某些自定义规则?
我试图创建一个随机三项式生成器,我希望这两个随机数遵循三项式规则(num1+num2=b)(num1*num2=c)C# 如何使随机数遵循某些自定义规则?,c#,random,C#,Random,我试图创建一个随机三项式生成器,我希望这两个随机数遵循三项式规则(num1+num2=b)(num1*num2=c) 我希望数字能写下来,但事实并非如此。另外,我不知道如何使随机数遵循这些规则。PS-随机数总是一样的,我如何改变它?以下是我对查尔斯建议的尝试: var rand = new Random(); string a = "x²"; int num1 = rand.Next(-50, 50); int num2 = rand.Next(-50, 50); int b = num1 +
我希望数字能写下来,但事实并非如此。另外,我不知道如何使随机数遵循这些规则。PS-随机数总是一样的,我如何改变它?以下是我对查尔斯建议的尝试:
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.");
我在最后简化了一点逻辑,但应该是一样的。试试这个:
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();
说明:
首先是随机问题。Random不是以随机方式生成数字,而是计算数字。因此,由于它是一种算法,因此每次尝试都会使用相同的算法。为了应对这种情况,随机种子本身与当前时间,然后改变算法的输出。在您的例子中,您创建了两个随机对象,但它们的生成速度非常快,以至于两个对象实际上都是在同一时间播种的,因此计算的是相同的“随机”数。这就是为什么在我的解决方案中,我们只创建一个Random
对象
第二:如果您只想向控制台写入一个字符串,请将字符串浓缩并将其作为一个参数传递。随机生成
num1
和num2
,然后从中计算b
和c
?nums应该是用户输入,用b和cYes回答问题,但这有关系吗?生成num1
和num2
,计算b
和c
,将它们显示给用户,让他们猜测num1
和num2
。变量总是整数吗?如果b和c是随机的,有时num1和num2将是小数。我注意到您需要共享random
的实例,否则每次都会得到相同的两个数字。有关更多信息,请参阅。另外,Console.WriteLine
的重载只会打印a
的值(认为它是格式字符串+参数)。也许Console.WriteLine($“x²+{b}x+{c}”)
可能更好?谢谢,我真的应该在发布之前试用一下!我改变了密码。我用逗号离开了writeline,因为有时候值有负号。此外,还需要检查输入以确保它们是数字,但不希望使代码比演示您的想法所需的更长和更复杂。谢谢,我现在了解了它的工作原理,感谢您的解释,但每当我尝试运行它时,它都会说$是一个意外的字符
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();