首页 新闻 会员 周边 捐助

C#比如传入一个12 原始数据有 1.2.3.5.7.8的数据如何通过算法匹配到等于12的和有哪些数

0
悬赏园豆:20 [已解决问题] 解决于 2015-12-07 18:15
还有一种可能原始数据只有1.1.2.3.2这种就小于12的哪些数字 只能等于或者小于12请问如何实现 等待大神出现。

详细问题:

   我有一个原始数据价格,有1,2,2,4,5,6,8,9比如这些数据都查询出来了。

当我需要一个12元的价格的时候。应该得到 9 1 2 或者  其他的结果。4,6,2等。反正等于12或者小于就可以了。


求完整方法
shenz_free的主页 shenz_free | 初学一级 | 园豆:4
提问于:2015-12-07 11:52
< >
分享
最佳答案
0

哎,年纪大了连题都看不懂了

收获园豆:20
zucker1988 | 小虾三级 |园豆:586 | 2015-12-07 11:58

大神,能解决不哦。如果可以请加我qq 86682644

shenz_free | 园豆:4 (初学一级) | 2015-12-07 12:00

@shenz_free: 前提是你要能说清楚题目。。

zucker1988 | 园豆:586 (小虾三级) | 2015-12-07 12:02

@l3oz: 我有一个原始数据价格,有1,2,2,4,5,6,8,9比如这些数据都查询出来了。

当我需要一个12元的价格的时候。应该得到 9 1 2 或者  其他的结果。4,6,2等。反正等于12或者小于就可以了。

shenz_free | 园豆:4 (初学一级) | 2015-12-07 12:05

@shenz_free: 应该可以符合你的要求了。。

 1 private static void Main(string[] args)
 2 {
 3     Test(new[] { 1, 2, 2, 4, 5, 6, 8, 9 }, 12);
 4 
 5     Console.ReadKey(true);
 6 }
 7 
 8 private static void Test(IReadOnlyList<int> data, int price)
 9 {
10     var queue = new Queue<List<int>>();
11 
12     for (var i = 0; i < data.Count; i++)
13         queue.Enqueue(new List<int> { i });
14 
15     while (queue.Count > 0)
16     {
17         var list = queue.Dequeue();
18         var sum = list.Sum(index => data[index]);
19 
20         if (sum <= price)
21         {
22             //match
23             Console.WriteLine(string.Join(",", list.Select(index => data[index])));
24         }
25 
26         if (sum >= price)
27             continue;
28 
29         for (var i = list[list.Count - 1] + 1; i < data.Count; i++)
30         {
31             var newList = new List<int>(list) { i };
32 
33             queue.Enqueue(newList);
34         }
35     }
36 }
zucker1988 | 园豆:586 (小虾三级) | 2015-12-07 12:33

@l3oz: 先谢谢大神,我先试试。。不过我这里是.NET(2.0)用不了linq

shenz_free | 园豆:4 (初学一级) | 2015-12-07 12:35
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册