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

简介: 如题,一个网友问的,我又去问其他的网友,再网上搜索,发贴问,最后终于解决,不过目前还没有明白为什么要这样写,以下是代码:  class Program    {        static void Main(string[] args)        {            double[] numbers = new double[] { 258.
如题,一个网友问的,我又去问其他的网友,再网上搜索,发贴问,最后终于解决,不过目前还没有明白为什么要这样写,以下是代码:
   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();
        }

    } 

目录
相关文章
|
4月前
|
Python
一个大于1的自然数,除了1和它本身外,不能被
一个大于1的自然数,除了1和它本身外,不能被
|
4月前
给定 n 个整数,求里面出现次数最多的数,如果有多个重复出现的数,求值最大的那个 给定n个整数,求里面出现次数最多的数,如果有多个重复出现的数,求出值最大的一
给定 n 个整数,求里面出现次数最多的数,如果有多个重复出现的数,求值最大的那个 给定n个整数,求里面出现次数最多的数,如果有多个重复出现的数,求出值最大的一
|
4月前
对任意给定的两个正整数,100<n<m<1000,计算这两个数之间所有素数和,包含m,n自身
对任意给定的两个正整数,100<n<m<1000,计算这两个数之间所有素数和,包含m,n自身
38 0
对任意给定的两个正整数,100<n<m<1000,计算这两个数之间所有素数和,包含m,n自身
wustojc5001求若干整数的最大值
wustojc5001求若干整数的最大值
55 0
LeetCode-2044 统计按位或能得到最大值子集的数目
LeetCode-2044 统计按位或能得到最大值子集的数目
C语言经典实例:11-20例:使用结构体输出学生成绩、编制万年历、验证哥德巴赫猜想、求二维数组最大最小值、数组求素数、数组元素排序、进制数的转换进制数的转换、找出次大值、重组数组(上)
C语言经典实例:11-20例:使用结构体输出学生成绩、编制万年历、验证哥德巴赫猜想、求二维数组最大最小值、数组求素数、数组元素排序、进制数的转换进制数的转换、找出次大值、重组数组(上)
C语言经典实例:11-20例:使用结构体输出学生成绩、编制万年历、验证哥德巴赫猜想、求二维数组最大最小值、数组求素数、数组元素排序、进制数的转换进制数的转换、找出次大值、重组数组(上)
C语言经典实例:11-20例:使用结构体输出学生成绩、编制万年历、验证哥德巴赫猜想、求二维数组最大最小值、数组求素数、数组元素排序、进制数的转换进制数的转换、找出次大值、重组数组(下)
C语言经典实例:11-20例:使用结构体输出学生成绩、编制万年历、验证哥德巴赫猜想、求二维数组最大最小值、数组求素数、数组元素排序、进制数的转换进制数的转换、找出次大值、重组数组(下)
C语言经典实例:11-20例:使用结构体输出学生成绩、编制万年历、验证哥德巴赫猜想、求二维数组最大最小值、数组求素数、数组元素排序、进制数的转换进制数的转换、找出次大值、重组数组(下)
|
算法 索引
Leetcode 40组合总数(回溯)Ⅱ&41缺失的第一个正数&42接雨水
给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。
93 0
Leetcode 40组合总数(回溯)Ⅱ&41缺失的第一个正数&42接雨水
|
测试技术
软件测试面试题:如果一个数恰好等于它的因子之和,则称该数为“完全数”,又称完美数或完备数。 例如:第一个完全数是6,它有约数1、2、3、6,除去它本身6外,其余3个数相加, 1+2+3=6。第二个完全
软件测试面试题:如果一个数恰好等于它的因子之和,则称该数为“完全数”,又称完美数或完备数。 例如:第一个完全数是6,它有约数1、2、3、6,除去它本身6外,其余3个数相加, 1+2+3=6。第二个完全
446 0