C# 猜测可能组合的方法
为了练习,我想写一个程序来猜测x和y的随机位置。例如,第一点是C# 猜测可能组合的方法,c#,recursion,C#,Recursion,为了练习,我想写一个程序来猜测x和y的随机位置。例如,第一点是 int x = 0; int y = 0; x += rand.Next(0, 4); y += rand.Next(0, 4); 然后从那个随机点开始,我将把另一个随机值加到x和y上,得到第二个点。但是我想回去随机找到那些点 要提出要点: int x = 0; int y = 0; List<Point> points = new List<Point>(); for (int i = 0; i &l
int x = 0;
int y = 0;
x += rand.Next(0, 4);
y += rand.Next(0, 4);
然后从那个随机点开始,我将把另一个随机值加到x和y上,得到第二个点。但是我想回去随机找到那些点
要提出要点:
int x = 0;
int y = 0;
List<Point> points = new List<Point>();
for (int i = 0; i < numberOfPointsWanted; i++)
{
x += rand.Next(0, 4);
y += rand.Next(0, 4);
points.Add(new Point(x, y));
}
以此类推,直到猜测出点1和点2的所有可能性为止,我不确定这是否正是您所要寻找的,但获得所有这些组合的一种方法是对循环使用嵌套的
:
for (int ax = 0; ax < 4; ax++)
{
for (int ay = 0; ay < 4; ay++)
{
var pointA = new Point(ax, ay);
for (int bx = 0; bx < 4; bx++)
{
for (int by = 0; by < 4; by++)
{
var pointB = new Point(bx, by);
Console.WriteLine($"{pointA.X} {pointA.Y} :: {pointB.X} {pointB.Y}");
}
}
}
}
用法示例:
private static void Main()
{
var results = GetAllCombinations(0, 3, 5);
foreach (var result in results)
{
Console.WriteLine(string.Join(" :: ", result.Select(p => $"{p.X} {p.Y}")));
}
Console.WriteLine("With a min value of 0 and max value of 3, " +
$"5 points generated {results.Count} results.");
GetKeyFromUser("Done! Press any key to exit...");
}
输出
我不确定这是否正是您要寻找的,但获得所有这些组合的一种方法是对
循环使用嵌套的:
for (int ax = 0; ax < 4; ax++)
{
for (int ay = 0; ay < 4; ay++)
{
var pointA = new Point(ax, ay);
for (int bx = 0; bx < 4; bx++)
{
for (int by = 0; by < 4; by++)
{
var pointB = new Point(bx, by);
Console.WriteLine($"{pointA.X} {pointA.Y} :: {pointB.X} {pointB.Y}");
}
}
}
}
用法示例:
private static void Main()
{
var results = GetAllCombinations(0, 3, 5);
foreach (var result in results)
{
Console.WriteLine(string.Join(" :: ", result.Select(p => $"{p.X} {p.Y}")));
}
Console.WriteLine("With a min value of 0 and max value of 3, " +
$"5 points generated {results.Count} results.");
GetKeyFromUser("Done! Press any key to exit...");
}
输出
现在我想猜测这些随机点,就像我没有将它们存储在列表中一样
@JosephDoggie这些是int
,因此小数点后没有任何内容。你怎么能猜到它们,它们或多或少都是随机的。统计上,x和y的每个下一个点只会增加2…给定一个上一个点,您只需循环将0到3添加到x,0到3添加到y,即可获得所有可能的下一个值。这就是你的意思吗?我应该能够猜到,因为它们确实是随机的,点只能移动一定的已知量。因此,我应该能够猜测点可以移动的最小值和最大值之间的所有可能组合现在我希望猜测这些随机点,就像我没有将它们存储在列表中一样
@JosephDoggie这些是int
,因此小数点后没有任何内容。你怎么能猜到它们,它们或多或少都是随机的。统计上,x和y的每个下一个点只会增加2…给定一个上一个点,您只需循环将0到3添加到x,0到3添加到y,即可获得所有可能的下一个值。这就是你的意思吗?我应该能够猜到,因为它们确实是随机的,点只能移动一定的已知量。所以我应该能够猜出最小值和最大值之间的每一个可能的组合点可以移动是的,这更接近我所寻找的。然而,如果我需要猜12个点,我将如何使用它呢。写那么多for循环是不切实际的,我不知道应该有多少个点,你确定这就是你想要做的吗?如果只有两个点的最小X和Y值为0,最大X和Y值为3,则最终将得到256个结果(单个点的16个可能值,提高到所组合点数的幂次方)。获得12个点的所有可能点值的完整范围将产生16^12=281474976710656
(281万亿)个可能的组合。我写了一个解决方案,可以做到这一点,但当我试着用12分的时候,我的内存用完了。我用一个样本更新了答案。用5分试一试,看看需要多长时间……:)是的,这更接近我想要的。然而,如果我需要猜12个点,我将如何使用它呢。写那么多for循环是不切实际的,我不知道应该有多少个点,你确定这就是你想要做的吗?如果只有两个点的最小X和Y值为0,最大X和Y值为3,则最终将得到256个结果(单个点的16个可能值,提高到所组合点数的幂次方)。获得12个点的所有可能点值的完整范围将产生16^12=281474976710656
(281万亿)个可能的组合。我写了一个解决方案,可以做到这一点,但当我试着用12分的时候,我的内存用完了。我用一个样本更新了答案。用5分试一试,看看需要多长时间……:)
private static void Main()
{
var results = GetAllCombinations(0, 3, 5);
foreach (var result in results)
{
Console.WriteLine(string.Join(" :: ", result.Select(p => $"{p.X} {p.Y}")));
}
Console.WriteLine("With a min value of 0 and max value of 3, " +
$"5 points generated {results.Count} results.");
GetKeyFromUser("Done! Press any key to exit...");
}