使用linq选择组合

时间:2009-10-16 19:53:54

标签: .net linq linq-to-objects

这也是我最近面临的一个面试问题。

描述:

任务是100美元(请考虑一些货币)将给我。我需要购买三件商品a,itemB,itemC。成本(我不确定0.25美元或0.75美元是有意义的,所以想想它作为其他货币)itemA = 0.25 $,itemB = 0.75 $和itemC = 20 $。我需要购买100件商品完全以100美元(我可以购买任意数量的itemA,itemB,ItemC但总数应为100)。

方案: 使用for循环我解决了它。

 for (int i = 1; i <= 100; i++)
   {
     for (int j = 1; j <= 100; j++)
     {
       for (int k = 1; k <= 20; k++)
        {
           if ((i * 0.25) + (j * 0.75) + (k * 5) == 100 && (i+j+k)==100)
           {
              Console.WriteLine("item1={0},item2={1},item3={2}", i, j, k);
            }
        }
     }
  }

我也得到了结果。

item1=1 , item2=93,item3=6 // cost =100,items=100

item1=18,item2=74,item3=8 //cost=100,items=100

item1=35,item2=55,item3=10 //cost=100,items=100

item1=52,item2=36,item3=12 //cost=100,items=100

item1=69,item2=17,item3=14 //cost=100,items=100

实际的任务是使用“linq”进行演示。如何使用Linq解决相同问题?

(无论如何,采访结束了。在接下来的采访中,没有人会要求它做。)

1 个答案:

答案 0 :(得分:6)

var r = from i in Enumerable.Range(1, 100) 
        from j in Enumerable.Range(1, 100) 
        from k in Enumerable.Range(1, 20)
        where (i * 0.25) + (j * 0.75) + (k * 5) == 100 && (i+j+k)==100
        select string.Format("item1={0},item2={1},item3={2}", i, j, k);

foreach (var line in r) 
    Console.WriteLine(line);