小弟在工作中遇到了个棘手的问题,以前读书的时候学过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] 谢谢各位大虾
在这里小弟先谢谢大家了! QQ 315829567 邮箱 [email protected] 谢谢各位大虾
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 . . .
你最好下这个:http://go.microsoft.com/?linkid=9709969
前面那个是在线安装的,这个是离线版本的。下载好以后解压缩直接安装。