C#中获取数组中相加和最接近或等于(<=)给定值的算法

本身是记录以作备忘,如果刚好你也需要,那可以参考下

先上原文链接:https://www.cnblogs.com/likui-bookHouse/p/7442987.html

原文中有老哥评论说该算法30个数以后单机计算会有很大时间消耗,但是考虑到我的应用场景不会有30个数那么多,所以想应用下看看效果,后期如果有反馈会及时回来更新

原文老哥的代码中是int类型的,如果是本人在 用的过程中可以根据需要修改该方法为引用类型,只要最终的组合结果符合要求即可,因任务更改原因,这块算法的实践应用搁置

 1 #region 获取数组中(多个数)相加和等于(<=)给定值的算法   
 2          int[] myarray = { 1, 2,3,4,5,6,7,8,9,10,11 };
 3          List<List<int>> mylist = new List<List<int>>();
 4          int length = myarray.Length;
 5          for (int i = 0; i < Math.Pow(2, length); i++)
 6            {
 7               List<int> myint = new List<int>();
 8               for (int j = 0; j < length; j++)
 9                 {
10                   if (Convert.ToBoolean(i & (1 << j)))
11                     myint.Add(myarray[j]);
12                 }
13               mylist.Add(myint);
14             }
15          foreach (var a in mylist)
16          {
17              if (a.Sum() == 20)
18              {
19                  foreach (var b in a)
20                  {
21                      Console.Write(b); Console.Write(",");
22                  }
23                  Console.WriteLine();
24              }      
25         }    
26 #endregion
posted @ 2022-07-19 10:02  大凉龙雀美人鼓  阅读(777)  评论(0)    收藏  举报