c# - Linq算术运算符组合

标签 c# linq linq-to-objects math combinations

尝试解决以下任务时:

 
使用算术运算符(+,-,*,/)重新排列四个5,以等于1到10。



     示例:5/5 + 5-5 = 1,5/5 + 5/5 = 2


我在不使用Linq的情况下在C#中进行了尝试(我不知道如何进一步进行)

public void GetDetails()
{

   char[] sym = new char[] { '+', '-', '/', '*' };

   int[] AOf5 = new int[] { 5, 5, 5, 5 };


for (int i = 0; i <4; i++)
 {
    for (int j = 0; j <4; j++)
     {
       for (int k = 0; k <4; k++)
          {
             for (int l = 0; l < 4; l++)
              {

                int result1 = AOf5[0] + sym[i] + AOf5[1] + sym[j] +
                AOf5[2] + sym[k] + AOf5[3];

               int result2 = AOf5[0] + sym[i] + AOf5[1] + sym[j] +
               AOf5[2] + sym[l] + AOf5[3];

              int result3 = AOf5[0] + sym[i] + AOf5[1] +
              sym[k] + AOf5[2] + sym[l] + AOf5[3];
              ....
              ....

              }  

         }

      }
  }


}

如果没有linq和使用linq,我将无法完成。期待您的帮助。

最佳答案

从左到右应用(无优先级),我可以获得:

1: ((5+5)-5)/5
2:
3: ((5+5)+5)/5
4: ((5*5)-5)/5
5: ((5-5)*5)+5
6: ((5*5)+5)/5
7: ((5+5)/5)+5
8:
9:
10: ((5+5)+5)-5


使用(编辑:oops-不需要“ no div”的东西):

    var operators = new[] {
          new { Name = "+", Func = (Func<decimal,decimal,decimal>)((x,y)=>x+y) },
          new { Name = "-", Func = (Func<decimal,decimal,decimal>)((x,y)=>x-y) },
          new { Name = "/", Func = (Func<decimal,decimal,decimal>)((x,y)=>x/y) },
          new { Name = "*", Func = (Func<decimal,decimal,decimal>)((x,y)=>x*y) }
      };
    var options = from i in Enumerable.Range(1, 10)
                  select new {i, op=(
                    from op1 in operators
                    let v1 = op1.Func(5,5)
                    from op2 in operators
                    let v2 = op2.Func(v1, 5)
                    from op3 in operators
                    let v3 = op3.Func(v2,5)
                    where v3 == i
                    select "((5" + op1.Name + "5)" + op2.Name + "5)"
                       + op3.Name + "5").FirstOrDefault()};
    foreach (var opt in options)
    {
        Console.WriteLine(opt.i + ": " + opt.op);
    }

关于c# - Linq算术运算符组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1584454/

相关文章:

c# - 如何使用 NAudio 实时计算 FFT(ASIO 输出)

c# - 如何使用字段名称的无效字符解析 Json?例如{ "file/folder": "/Shared/Salesforce/asdf.txt" } with Newtonsoft?

c# - 在 DbContext 之外延迟加载

c# - Linq 拼图 : How do I convert this foreach to linq syntax?

c# - LINQ 到对象 : Is there a way to pass to LINQ the accessor from which to get values?

c# - 时间序列的"Join"

c# - 有哪些工具可用于测试多线程 .net 代码?

c# - 在 html 样式属性中执行代码时出错

c# - 如何从 C# 中的列表列表中获取不同的元素

c# - 使用参数对各种方法调用进行排队