小弟在工作中遇到了个棘手的问题,以前读书的时候学过VB编程只是简单的大学里应付考试用的,现在基本上全还给老师了。所以在这里请大家帮个忙!我遇到的问题是,例如一组数据: 20.3  23 34 46  123  145  174  173.9  220.3  237.2 198.3 183.2 177.3  现在这样的数值从20多到300左右含小数点的数值,怎样把这些数值中的几个数值相加,结果是798.8到800.9范围内的数,那几个相加的数值要显示出来。数值用完就不能重复使用了。(最好是把所有数值输入进去求出结果分成一组一组的显示出来)。
   在这里小弟先谢谢大家了!  QQ 315829567  邮箱 [email protected]  谢谢各位大虾 

解决方案 »

  1.   

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                var data = "20.3 23 34 46 123 145 174 173.9 220.3 237.2 198.3 183.2 177.3".Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).Select(x => double.Parse(x));
                var result = foo(data, new double[] { }, 798.8, 800.9);
                foreach (var item in result)
                {
                    Console.WriteLine("sum: {0}, items: {1}", item.Sum(), string.Join(", ", item.Select(x => x.ToString())));
                }
            }        static IEnumerable<IEnumerable<double>> foo(IEnumerable<double> data, IEnumerable<double> includenum, double min, double max)
            { 
                double includenum_sum = includenum.Sum();
                if (includenum.Sum() > min && includenum_sum < max) yield return includenum;
                if (includenum.Sum() < min)
                {
                    foreach (double d in data.Except(includenum).Where(x => includenum_sum + x < max && (includenum.Count() == 0 || x > includenum.Max())))
                    {
                        foreach (var item in foo(data, includenum.Concat(new double[] { d }), min, max))
                        {
                            yield return item;
                        }
                    }
                }
            }
        }
    }sum: 799.4, items: 20.3, 23, 34, 46, 145, 173.9, 174, 183.2
    sum: 799.8, items: 20.3, 23, 34, 145, 174, 183.2, 220.3
    sum: 799.7, items: 20.3, 23, 34, 145, 173.9, 183.2, 220.3
    sum: 800.8, items: 20.3, 23, 34, 173.9, 174, 177.3, 198.3
    sum: 800.8, items: 20.3, 23, 46, 123, 174, 177.3, 237.2
    sum: 800.7, items: 20.3, 23, 46, 123, 173.9, 177.3, 237.2
    sum: 800.8, items: 20.3, 34, 46, 123, 174, 183.2, 220.3
    sum: 800.7, items: 20.3, 34, 46, 123, 173.9, 183.2, 220.3
    sum: 800.8, items: 20.3, 34, 46, 145, 174, 183.2, 198.3
    sum: 800.7, items: 20.3, 34, 46, 145, 173.9, 183.2, 198.3
    sum: 799.8, items: 20.3, 34, 173.9, 174, 177.3, 220.3
    sum: 799.8, items: 20.3, 46, 145, 174, 177.3, 237.2
    sum: 799.7, items: 20.3, 46, 145, 173.9, 177.3, 237.2
    sum: 799.1, items: 20.3, 46, 174, 177.3, 183.2, 198.3
    sum: 799, items: 20.3, 46, 173.9, 177.3, 183.2, 198.3
    sum: 799.1, items: 20.3, 123, 198.3, 220.3, 237.2
    sum: 800.1, items: 20.3, 145, 177.3, 220.3, 237.2
    sum: 799.4, items: 20.3, 177.3, 183.2, 198.3, 220.3
    sum: 799.7, items: 23, 34, 145, 177.3, 183.2, 237.2
    sum: 799.1, items: 23, 46, 145, 173.9, 174, 237.2
    sum: 799.5, items: 23, 145, 174, 220.3, 237.2
    sum: 799.4, items: 23, 145, 173.9, 220.3, 237.2
    sum: 798.9, items: 34, 46, 123, 177.3, 198.3, 220.3
    sum: 800.7, items: 34, 46, 123, 177.3, 183.2, 237.2
    sum: 800.5, items: 34, 173.9, 174, 198.3, 220.3
    sum: 800.5, items: 46, 123, 174, 220.3, 237.2
    sum: 800.4, items: 46, 123, 173.9, 220.3, 237.2
    sum: 800.5, items: 46, 145, 174, 198.3, 237.2
    sum: 800.4, items: 46, 145, 173.9, 198.3, 237.2
    sum: 800.8, items: 46, 174, 177.3, 183.2, 220.3
    sum: 800.7, items: 46, 173.9, 177.3, 183.2, 220.3
    sum: 799.1, items: 123, 145, 173.9, 174, 183.2
    sum: 800.8, items: 145, 198.3, 220.3, 237.2
    Press any key to continue . . .
      

  2.   

    版主可否私聊 教教我 我现在快愁死了,以前读书的时候学过VB简单的操作,现在全还给老师了。QQ: 315829567 我的联系方式
      

  3.   

    下载一个C#,新建一个控制台程序,贴上上面的代码,即可得到结果下载地址:http://go.microsoft.com/?linkid=9709940
      

  4.   


    你最好下这个:http://go.microsoft.com/?linkid=9709969
    前面那个是在线安装的,这个是离线版本的。下载好以后解压缩直接安装。
      

  5.   

    按ctrl+f5