菜☞鸟
2019-05-06 10:46
采纳率: 66.7%
浏览 352
已采纳

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

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

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • blownewbee 2019-05-06 11:10
    已采纳

    递归解决

    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 . . .
    
    
    点赞 打赏 评论
  • 智者知已应修善业 2019-05-06 10:49

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

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

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

    点赞 打赏 评论

相关推荐 更多相似问题