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
北凉参差百万户,其中多少铁衣裹枯骨?
功名付与酒一壶,试问帝王将相几抔土?
山上走兔,林间睡狐,气吞江山如虎。
珍珠十斛,雪泥红炉,素手蛮腰成孤。
十万弓弩,射杀无数。
百万头颅,滚落在路。
好男儿,莫要说那天下英雄入了吾觳。
小娘子,莫要将那爱慕思量深藏在腹。
来来来,试听谁在敲美人鼓。
来来来,试看谁是阳间人屠?
来来来,试问谁与我共逐鹿......

浙公网安备 33010602011771号