`
niunan
  • 浏览: 699448 次
  • 性别: Icon_minigender_1
  • 来自: 南宁
社区版块
存档分类
最新评论

在一堆数中查询相加得某个数的组合

    博客分类:
  • .NET
 
阅读更多

如题,一个网友问的,我又去问其他的网友,再网上搜索,发贴问,最后终于解决,不过目前还没有明白为什么要这样写,以下是代码:

  1.   class Program  
  2.     {  
  3.         static void Main(string[] args)  
  4.         {  
  5.             double[] numbers = new double[] { 258.5, 1229.1, 39.6, 660.3, 660, 660, 165, 165, 3060, 270, 4.8, 440, 279.06, 47.89, 38.02, 600, 286, 63.36, 1530, 1320, 1344, 3954 };  
  6.   
  7.   
  8.   
  9.   
  10.             Console.WriteLine("原数列:258.5,1229.1,39.6,660.3,660,660,165,165,3060,270,4.8,440,279.06,47.89,38.02,600,286,63.36,1530,1320,1344,3954\n\n");  
  11.   
  12.   
  13.              SumFinder.FindSum(numbers, 7785.52);  
  14.             // SumFinder.FindSum(new double[]{1,2,2,3,5}, 10);  
  15.   
  16.   
  17.         }  
  18.     }  
  19.   
  20.   
  21.   
  22.   
  23.     static class SumFinder  
  24.     {  
  25.         public static void FindSum(double[] numbers, double targetSum)  
  26.         {  
  27.             int elementCount = numbers.Length;  
  28.             int lastCombination = 2 << elementCount - 1;  
  29.             int firstCombination = 1;  
  30.             double sum;  
  31.             for (int i = firstCombination; i <= lastCombination; i++)  
  32.             {  
  33.                 sum = 0;  
  34.                 for (int pos = 0; pos < elementCount; pos++)  
  35.                 {  
  36.                     if ((i & (1 << pos)) != 0) //当前组合第pos个数是否取中  
  37.                         sum += numbers[pos];  
  38.                 }  
  39.                 if (sum == targetSum)  
  40.                 {  
  41.                     string str = "";  
  42.                     for (int pos = 0; pos < elementCount; pos++)  
  43.                     {  
  44.                         if ((i & (1 << pos)) != 0)  
  45.                         {  
  46.                            str += numbers[pos]+" + ";  
  47.                         }  
  48.                     }  
  49.                     Console.Write(str.Substring(0,str.Length-3)+" = " + targetSum);  
  50.                     Console.WriteLine();  
  51.                 }  
  52.             }  
  53.             Console.WriteLine("结束");  
  54.             Console.ReadLine();  
  55.         }  
  56.     }  
分享到:
评论
1 楼 han_yankun2009 2013-05-12  
,楠老师不错呀

相关推荐

Global site tag (gtag.js) - Google Analytics