C++程序设计的算法解决问题

1,问题描述:在下面的算式中,添加“+”、“-”,“*”,“/”,4个运算符,使得这个式子成立。
5 5 5 5 5=5,不用枚举算法解决,用别的算法解决,求代码

3个回答

递归解决

using System;
using System.Linq;
using System.Collections.Generic;
using System.Text.RegularExpressions;

namespace Q760027
{
    class Program
    {
        static IEnumerable<string> solve(string s, int[] v, int t)
        {
            if (v.Length == 2)
            {
                if (v[0] + v[1] == t) yield return s + "+";
                if (v[0] - v[1] == t) yield return s + "-";
                if (v[0] * v[1] == t) yield return s + "*";
                if (v[1] != 0 && v[0] % v[1] == 0) { if (v[0] / v[1] == t) yield return s + "/"; }
                yield break;
            }
            foreach (var item in solve(s + "+", new int[] { v[0] + v[1] }.Concat(v.Skip(2)).ToArray(), t))
                yield return item;
            foreach (var item in solve(s + "-", new int[] { v[0] - v[1] }.Concat(v.Skip(2)).ToArray(), t))
                yield return item;
            foreach (var item in solve(s + "*", new int[] { v[0] * v[1] }.Concat(v.Skip(2)).ToArray(), t))
                yield return item;
            if (v[1] != 0 && v[0] % v[1] == 0)
            {
                foreach (var item in solve(s + "/", new int[] { v[0] / v[1] }.Concat(v.Skip(2)).ToArray(), t))
                    yield return item;
            }
        }

        static void Main(string[] args)
        {
            foreach (string s in solve("", new int[] { 5, 5, 5, 5, 5 }, 5).Where(x => !Regex.IsMatch(x, @"[\+\-][\*\/]")))
                Console.WriteLine(s);
        }
    }
}

++--
+-+-
+--+
-++-
-+-+
--++
**//
*/+-
*/-+
*/*/
*//*
/*+-
/*-+
/**/
/*/*

C:\Program Files\dotnet\dotnet.exe (process 5732) exited with code 0.
Press any key to close this window . . .

5*5/5+5-5=5按运算符优先级填入

* /这两个符号,如果在一起,则形成新的填数  即对    5 5 5=5进行填写+-,根据交换律我们知道,恒成立。
当* /这两个符号分离的时候,则形成新的填数,即读   25 5 1 这几个数进行排列填写 + -,很容易知道,这个等式不可能成立。

即结果应该是 * /连在一起的所有组合,都是这个等式的解。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!