2009-10-16 72 views
2

这也是我最近面临的面试问题之一。使用linq选择组合

说明:

的任务是100 $(请考虑一些货币)将给予我。我需要购买三个项目意达,itemB的itemC.The成本(我不知道$ 0.25或0.75 $是有意义的,所以认为它是其他货币)itemA = 0.25 $,itemB = 0.75 $和itemC = 20 $。我需要购买100件完全在100 $(我可以购买任何数量的itemA,itemB,ItemC,但总数应该是100)。

解决方案: 使用循环我解决了这个问题。

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相同的演示?

(总之采访结束了。在下次采访中没有人会问这件事)。

回答

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);