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