.net - 使用 linq 选择组合

标签 .net linq linq-to-objects

这也是我最近遇到的面试问题之一。

描述:

任务是给我100美元(请考虑一些货币)。我需要购买三件元素itemA,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 解决相同问题?

(无论如何面试结束了。当然在下一次面试中没有人会要求它这样做)。

最佳答案

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

关于.net - 使用 linq 选择组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1580096/

相关文章:

c# - 如何使用 ILGenerator 设置 ".maxstack"

C# 将时间列表拆分为时间范围

c# - LINQ 到 SQL : Change timestamp forcefully of a table

c# - LINQ 等效查询

c# - 选择同一列上的多个位置

c# - 如何在字符串上添加 `.Take()` 并在末尾获取字符串?

.net - 如果在 TabControl 或 Panel 中查找 Control,Form.Controls 将不返回任何内容

c# - 以编程方式调用 C# 编译器来编译 C# 代码

c# - 访问由 JavaScript 编辑的隐藏输入值

c# - 为什么修改列表会影响过滤的列表?