现在的位置: 首页 > 综合 > 正文

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

2011年03月19日 ⁄ 综合 ⁄ 共 1744字 ⁄ 字号 评论关闭
如题,一个网友问的,我又去问其他的网友,再网上搜索,发贴问,最后终于解决,不过目前还没有明白为什么要这样写,以下是代码:
  class Program
    {
        static void Main(string[] args)
        {
            double[] numbers = new double[] { 258.51229.139.6660.366066016516530602704.8440279.0647.8938.0260028663.361530132013443954 };

            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");

             SumFinder.FindSum(numbers, 7785.52);
            // SumFinder.FindSum(new double[]{1,2,2,3,5}, 10);

        }
    }

    static class SumFinder
    {
        public static void FindSum(double[] numbers, double targetSum)
        {
            int elementCount = numbers.Length;
            int lastCombination = 2 << elementCount - 1;
            int firstCombination = 1;
            double sum;
            for (int i = firstCombination; i <= lastCombination; i++)
            {
                sum = 0;
                for (int pos = 0; pos < elementCount; pos++)
                {
                    if ((i & (1 << pos)) != 0//当前组合第pos个数是否取中
                        sum += numbers[pos];
                }
                if (sum == targetSum)
                {
                    string str = "";
                    for (int pos = 0; pos < elementCount; pos++)
                    {
                        if ((i & (1 << pos)) != 0)
                        {
                           str += numbers[pos]+" + ";
                        }
                    }
                    Console.Write(str.Substring(0,str.Length-3)+" = " + targetSum);
                    Console.WriteLine();
                }
            }
            Console.WriteLine("结束");
            Console.ReadLine();
        }

    } 

抱歉!评论已关闭.