2009-10-16 4 views
2

C'est aussi l'une des questions d'interview auxquelles j'ai été confrontée récemment.Sélection de la combinaison à l'aide de linq

Description:

La tâche est de 100 $ (S'il vous plaît envisager une monnaie) sera donné à me.I besoin d'acheter trois articles Itema, elementB, coût de itemC.The (je ne suis pas sûr de 0,25 $ ou 0.75 $ sont significatifs, alors pensez-y comme une autre devise) itemA = 0.25 $, itemB = 0.75 $ et itemC = 20 $. J'ai besoin d'acheter 100 articles exactement à 100 $ (je peux acheter n'importe quel nombre de itemA, itemB, ItemC mais le total devrait être 100).

Solution: à l'aide de la boucle i résolu.

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

J'obtenu les résultats aussi.

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 

La tâche réelle était de donner la démo en utilisant « LINQ » .Comment puis-je résoudre le même LINQ?

(De toute façon l'interview était terminée.Ou bien, dans la prochaine interview, personne ne le demandera).

Répondre

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