net6 有一个集合Listint26912634875132696。随机生成4组数据加起来在120-200之间的如何快速找到?
可以使用回溯算法来解决这个问题。具体步骤如下:
-
创建一个方法来实现回溯算法,该方法接受以下参数:
- 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/iF0q 著作权归作者所有。请勿转载和采集!