zoukankan      html  css  js  c++  java
  • 在一堆数中查询相加得某个数的组合

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

        } 

    撸码:复制、粘贴,拿起键盘就是“干”!!!
  • 相关阅读:
    《Scrum实战》第0次课【如何学习敏捷】全团课后任务汇总
    关于 Android 5.0 原生系统网络图标上的感叹号问题解决方法
    [Android Tips] 18. Enable/Disable WiFi via adb
    [Android Tips] 17. 查看 APK 签名信息
    [Android Tips] 16. Update Android SDK from command-line
    [Android Tips] 15. Enforcing spaces in string resources
    Gradle Cheat Sheet
    [Android Tips] 14. Using Proguard with Android without obfuscation
    cuda线程/线程块索引小结
    cuda编程学习6——点积dot
  • 原文地址:https://www.cnblogs.com/niunan/p/2324773.html
Copyright © 2011-2022 走看看