C# .NET 6 - 在集合中快速查找满足条件的四组数字
可以使用回溯算法来解决这个问题。具体步骤如下:
-
创建一个方法来实现回溯算法,该方法接受以下参数:
- 'List
numbers':待选择的数字集合 - 'int targetSum':目标和
- 'int currentIndex':当前数字的索引
- 'int currentSum':当前已选择数字的和
- 'List
currentList':当前已选择的数字列表 - 'List<List
> result':存储满足条件的结果列表
- 'List
-
在回溯方法中,首先判断当前已选择数字的和是否在 120-200 之间,如果在范围内,则将当前已选择的数字列表添加到结果列表中。
-
然后,从当前数字的索引开始,遍历剩余的数字。对于每个数字,将其加入当前已选择的数字列表,并更新当前数字的索引和当前已选择数字的和。
-
递归调用回溯方法,继续选择下一个数字。
-
在递归调用返回后,将当前已选择的数字从列表中移除,以便尝试其他组合。
-
最后,返回结果列表。
以下是具体的实现代码:
using System;
using System.Collections.Generic;
public class Program
{
public static List<List<int>> FindCombinations(List<int> numbers, int targetSum)
{
List<List<int>> result = new List<List<int>>();
Backtrack(numbers, targetSum, 0, 0, new List<int>(), result);
return result;
}
private static void Backtrack(List<int> numbers, int targetSum, int currentIndex, int currentSum, List<int> currentList, List<List<int>> result)
{
if (currentSum >= 120 && currentSum <= 200)
{
result.Add(new List<int>(currentList));
// 如果只需要找到一组满足条件的结果,可以在这里返回
}
for (int i = currentIndex; i < numbers.Count; i++)
{
int num = numbers[i];
currentList.Add(num);
currentSum += num;
Backtrack(numbers, targetSum, i + 1, currentSum, currentList, result);
currentList.RemoveAt(currentList.Count - 1);
currentSum -= num;
}
}
public static void Main(string[] args)
{
List<int> numbers = new List<int> { 2, 6, 9, 12, 63, 48, 75, 13, 26, 96 };
int targetSum = 120;
List<List<int>> combinations = FindCombinations(numbers, targetSum);
foreach (List<int> combination in combinations)
{
Console.WriteLine(string.Join(", ", combination));
}
}
}
以上代码会输出满足条件的结果列表。可以根据实际情况调整目标和的范围和输出方式。
原文地址: https://www.cveoy.top/t/topic/qmwS 著作权归作者所有。请勿转载和采集!