24点游戏-c#求解-英雄会在线编程题目

来源:互联网 发布:unity3d射击游戏视频 编辑:程序博客网 时间:2024/04/29 09:22

     小时候挺喜欢玩24的游戏,看到这道题也特别有感情,所以,就拿它来写写吧。

      中间还有个小插曲,自己写完后,就拿数据进行测试,测试过程中,就然被一组随机数据给难倒了,呵呵,程序给出可以计算出来,可是我那着笔算了下,没算出来,所以又回到程序看看程序怎么算出来的,哈哈:这组数据是:5,5,2,10,有兴趣的人先算算看,怎样得到24,然后再接着看吧。

 

24点游戏(经典再回顾·限期30天)
  • 编程语言要求:
  • 240分钟
  • C C++ C#                
题目详情

“24点游戏是一种使用扑克牌来进行的益智类游戏,游戏内容是:从一副扑克牌中抽去大小王剩下52张,任意抽取4张牌,把牌面上的数(A代表1)运用加、减、乘、除和括号进行运算得出24。每张牌都必须使用一次,但不能重复使用。

有些组合有不同种算法,例如要用2,4,6,12四张牌组合成24点,可以有如下几种组合方法:


  1. 2 + 4 + 6 + 12 = 24
  2. 4 × 6 ÷ 2 + 12 = 24
  3. 12 ÷ 4 × (6 + 2) = 24


当然,也有些组合算不出24,如1、1、1、1 和 6、7、8、8等组合。”

--题目描述来自wikipedia:http://zh.wikipedia.org/wiki/24%E7%82%B9。


请完成函数can24,4张牌如果可以组成24点,返回1,不能则返回0。


友情提醒:

注意以下这些组合:

1 1 1 10    不可以;

6 6 6 6     可以;

5 5 5 1     可以,即可以用分数,如(5-1/5)*5 = 24;

1 1 1 11   可以;


如果你还是不咋明白24点到底是怎么一回事,这里有一个可以在线计算24点的应用:http://www.zhongguosou.com/game_lookup_tools/game_24_point.html,可慢慢体会。

        先说思路吧,其实算24也就是加减乘除四则运算,然后就是括号,其实要不要括号没关系,因为我们发现,计算一定是从两个数进行四则运算开始,然后得到的结果在和另外的数进行四则运算。直到全部计算完为止。

步骤:

1、首先从4个数里面,选择两个数,进行四则运算,将结果返回。

2、这样就只剩3个数了,重复步骤一,直到最后一个数,看看这个数是否==24,相等,就找到了。

      思路非常简单,代码也非常简单:

函数一:计算两个数的四则运算结果

/// <summary>
        /// 两个数操作得出的结果集
        /// </summary>
        /// <param name="a"></param>
        /// <param name="b"></param>
        /// <returns></returns>
        public static float[] cal(float a,float b)
        {
            float[] result;
            if (a == 0||b==0)
            {
                if (a == 0 && b == 0)
                {
                    result = new float[1];
                    result[0] = 0;
                }
                else
                {
                    if (a == 0)
                    {
                        result = new float[3];
                        result[0] = b;
                        result[1] = 0 - b;
                        result[0] = 0;
                    }
                    else
                    {
                        result = new float[3];
                        result[0] = a;
                        result[1] = 0 -a;
                        result[0] = 0;
                    }
                }
            }
            else
            {
                result = new float[6];
                result[0] = a + b;
                result[1] = a - b;
                result[2] = a * b;
                result[3] = a / b;
                result[4] = b - a;
                result[5] = b / a;
            }
            return result;
        }

 

 

函数二:遍历给定的多个数进行四则运算

 public static int cal(float[] cards)
        {
            int result = 0;
            if (cards.Length == 2)
            {
                float[] array = cal(cards[0], cards[1]);
                float tmp = 0;
                for (int i = 0; i < array.Length; i++)
                {
                    tmp = (float)Math.Floor(array[i] * 1000 + 0.1) / 1000;
                    if (tmp == 24)
                    {
                        result = 1;
                        break;
                    }
                }
            }
            else
            {
                for (int i = 0; i < cards.Length - 1; i++)
                {
                    for (int j = i + 1; j < cards.Length; j++)
                    {
                        float[] array = cal(cards[i], cards[j]);
                        float[] newdata = new float[cards.Length - 1];
                        int index = 0;
                        for (int k = 0; k < cards.Length; k++)
                        {
                            if (k != i && k != j)
                            {
                                newdata[index] = cards[k];
                                index++;
                            }
                        }
                        for (int k = 0; k < array.Length; k++)
                        {
                            newdata[newdata.Length - 1] = array[k];
                            result = cal(newdata);
                            if (result == 1)
                            {
                                break;
                            }
                        }
                        if (result == 1)
                        {
                            break;
                        }
                    }
                    if (result == 1)
                    {
                        break;
                    }
                }
            }
            return result;
        }

 

主函数调用:

float[] cards = new float[4];
            cards[0] = a;
            cards[1] = b;
            cards[2] = c;
            cards[3] = d;
            return cal(cards);

 

ok,提交没有问题

1 0
原创粉丝点击