2009-10-16 2 views
2

이것은 최근 내가 직면 한 인터뷰 질문 중 하나입니다.linq을 사용하여 조합 선택

설명 :

작업 (일부 통화를 고려하시기 바랍니다) 나랑 주어집니다 세 가지 항목 itemA, itemB의 itemC.The 비용 (내가하지 않도록 0.25 $ 이상을 구입해야합니다 $ 100 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); 
관련 문제