zoukankan      html  css  js  c++  java
  • c#和javascript分别轻松实现计算24点

    24点游戏介绍:给出4个1-9之间的整数(ms我当年玩的时候是用扑克牌),其中每个数字必须且只用一次;任意使用+-*/ ( ),构造出一个表达式,使得最终结果为24,这就是常见的算24点的游戏(我的老家又叫“加减乘除24”,一语中的)。
    记得还是在大学毕业前找工作的时候,面过一家电子商务领域非常有名的公司,其中笔试的一题就是计算24点。当时要求用c语言写出来,虽然笔者思路清晰(玩的很熟嘛^_^),可是c不过关,上机没有通过,想起来现在依然痛心。
    现在想想,当年的实现太“中规中矩”了:先用递归构造表达式,接着switch case解析表达式并计算。可是在计算表达式的地方出现问题,印象中switch case了很多次,囧。
    工作快两年了,也算积累了一些肤浅的经验。利用现有语言工具的函数或方法,我们计算起来相对而言轻松多了,而且功能更强大。下面就来实现一个通用的24点算法:不限数字大小必须是1-9(为了防止除数为0的情况,0可以特殊考虑,不作为输入参数),不限最终结果(大于小于等于24皆可)。
    实现思路
    a、构造表达式(所有输入的数字都用到,且只能用到一次。这个用递归人人皆可以)
    b、利用c#的DataTable的Compute方法和javascript的eval函数,计算第一步构造出的表达式运算结果
    下面将自己的实现贴出来(可是依然不会c实现^_^)。
    1、c#代码:

    Code


            
    public static string GetExpression(string[] numArr, int targetNum)
            {
                
    string result = "没有匹配的表达式使之等于" + targetNum.ToString();
                
    if (Computing(numArr, numArr.Length, targetNum))
                {
                    result 
    = numArr[0].Substring(1, numArr[0].Length - 2+ "=" + targetNum.ToString();
                }
                
    return result;
            }
        }


        
    class Program
        {
            
    static void Main(string[] args)
            {
                
    string[] numArr = { "2""4""8""16" }; //正常都是4个数字,本程序不限制个数
                string result = TwentyFour.GetExpression(numArr, 24); // 预期的目标计算结果可以不是24
                Console.WriteLine(result);
            }
        }
    }

    2、javascript代码:
    Code
    测试的网页一并贴出来:
    Code
    ps:本人对js函数不熟悉,不知道还有没有更直接的函数。
    我个人认为上述两种实现都挺直观的。步骤二里实现计算的算法其实都转移给了语言工具(c#和js),不知道c可不可以。
    好了,欢迎其他语言的高手贴出更优秀简洁的代码(尤其是c),共同交流学习,先洗洗睡了。


    作者:Jeff Wong
    出处:http://jeffwongishandsome.cnblogs.com/
    本文版权归作者和博客园共有,欢迎围观转载。转载时请您务必在文章明显位置给出原文链接,谢谢您的合作。

  • 相关阅读:
    LeetCode 10 Regular Expression Matching(字符串匹配)
    LeetCode 9 Palindrome Number(回文数字判断)
    操作系统期末复习资料分享
    计算机网络那些事~(二)
    seL4之hello-3征途
    计算机网络那些事~(一)
    seL4之hello-2旅途(完成更新)
    博客声明
    seL4环境配置
    Canvas链式操作
  • 原文地址:https://www.cnblogs.com/jeffwongishandsome/p/1495313.html
Copyright © 2011-2022 走看看