算法!用C#写一个函数,在一个数组中找出随意几个值相加等于一个值
比如,数组{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20}  
要找出那些数相加等于100

 解决方案一:
      #region  解决方案一
int[] myarray = { , , , , , , , , , , , , , , , , , , , };
List<List<int>> mylist = new List<List<int>>();
int length = myarray.Length;
for (int i = ; i < Math.Pow(, length); i++)
{
List<int> myint = new List<int>();
for (int j = ; j < length; j++)
{
if (Convert.ToBoolean(i & ( << j)))
myint.Add(myarray[j]);
}
mylist.Add(myint);
}
foreach (var a in mylist)
{
if (a.Sum() == )
{
foreach (var b in a)
{
Console.Write(b); Console.Write(",");
}
Console.WriteLine();
}
}
Console.ReadKey();
Console.WriteLine("--------------");
#endregion
 解决方案二:使用迭代器
迭代器(iterator)是一种对象,它能够用来遍历标准模板库容器中的部分或全部元素,每个迭代器对象代表容器中的确定的地址。
迭代器修改了常规指针的接口,所谓迭代器是一种概念上的抽象:那些行为上像迭代器的东西都可以叫做迭代器。然而迭代器有很多不同的能力,
它可以把抽象容器和通用算法有机的统一起来。
 static void Main(string[] args)
{
double[] myarray1 = { 1.1, 13.6, 14.8, 15.9, 16.4, 17.7, 2.5, 3.3, 4.9, 5.8, 6.8, 7.5, 8.7, 9.4, 10.7, 11.2, 12.9, 13.6, 14.8, 15.9, 16.4, 17.7, 18.4, 19.2 };
int cnt = ;
foreach (var result in SelectCompute(myarray1, 100.0, myarray1.Length - ))
{
Console.Write("结果{0}==> ", ++cnt);
foreach (var n in result)
Console.Write("{0} ", n);
Console.WriteLine();
}
Console.WriteLine("--------------End");
Console.ReadKey();
#endregion
} /// <summary>
/// 寻找组合 迭代器算法
/// </summary>
/// <param name="array">数组</param>
/// <param name="sum">总数</param>
/// <param name="index"></param>
/// <returns></returns>
static IEnumerable<IEnumerable<double>> SelectCompute(double[] array, double sum, int index)
{
if (index >= )
{
foreach (var sub in SelectCompute(array, sum, index - ))
yield return sub; foreach (var sub in SelectCompute(array, sum - array[index], index - ))
yield return sub.Concat(new double[] { array[index] }); if (Math.Abs(array[index] - sum) <= double.Epsilon)
yield return new double[] { array[index] };
}
}

最新文章

  1. 【转】网络编程socket基本API详解
  2. 【Redis】简介与安装
  3. 10 款最好的 Python IDE
  4. SVG裁剪和平移的顺序
  5. python_way day12 sqlalchemy,原生mysql命令
  6. 第二章 管理程序流(In .net4.5) 之 管理多线程
  7. Mac系统Finder访问资源库文件夹
  8. Host Definition
  9. mysql innerjoin left join right join 解析
  10. php 垃圾回收机制----写时复制和引用计数
  11. Bosch 英语面试准备分享
  12. 模态Model视图Push下一个视图(混合跳转)
  13. 【luogu P4007 清华集训2017】小Y和恐怖奴隶主
  14. mybtis逆向工程实战教程--条件查询
  15. php年会抽奖
  16. 安全测试&#160;一次关于WEB的URL安全测试
  17. Guava的Supplier实现单例
  18. tyvj 2075 [NOIP2012T5]借教室 区间更新+二分
  19. Linux:at命令详解
  20. json树递归js查询json父子节点

热门文章

  1. Hash函数和消息摘要算法
  2. Go并发原理
  3. 【转】如何使用Java、Servlet创建二维码
  4. Template Method模式和Strategy模式有何异同
  5. 【总结整理】天地图WMTS服务与卫星图匹配与坐标转换
  6. 205. Isomorphic Strings两个数组变形记,是否符合规则
  7. 项目一:第八天 1、前台系统导入 实现客户注册 发验证码,邮件 springdata-redis存储数据 3、实现客户登陆
  8. 为什么一些公司把dwg文件转化为pdf
  9. Luogu 2149 [SDOI2009]Elaxia的路线
  10. Entity Framework Tutorial Basics(36):Eager Loading