读书人

[散分][分享]24点源代码[施用扑克牌显

发布时间: 2012-07-28 12:25:13 作者: rapoo

[散分][分享]24点源代码[使用扑克牌显示]
最近做了一个24点的程序,思想是循环生成4个数的排列和11种表达式,再计算结果,如果为24则成功。

注:生成的数使用扑克牌显示。

一些关键的类如下:

1.排列组合类

2.计算器类

3.24点计算类

对应的源代码如下:

1.排列组合类:

C# code
//-----------------------------------------//// 算法:排列组合类//// 版权所有(C) Snowdust// 个人博客    http://blog.csdn.net/snowdust & http://snowdust.cnblogs.com// MSN & Email snowdust77@sina.com//// 此源代码可免费用于各类软件(含商业软件)// 允许对此代码的进一步修改与开发// 但必须完整保留此版权信息//// 调用方法如下://// 1.GetPermutation(T[], startIndex, endIndex)// 对startIndex到endIndex进行排列,其余元素不变//// 2.GetPermutation(T[])// 返回数组所有元素的全排列//// 3.GetPermutation(T[], n)// 返回数组中n个元素的排列//// 4.GetCombination(T[], n)// 返回数组中n个元素的组合//// 版本历史:// V0.1 2010-01-20 摘要:首次创建 ////-----------------------------------------using System;using System.Collections.Generic;namespace Arithmetic{    public class PermutationAndCombination<T>    {        #region 内部方法        /// <summary>        /// 递归算法求数组的组合(私有成员)        /// </summary>        /// <param name="list">返回的范型</param>        /// <param name="t">所求数组</param>        /// <param name="n">辅助变量</param>        /// <param name="m">辅助变量</param>        /// <param name="b">辅助数组</param>        /// <param name="M">辅助变量M</param>        private static void GetCombination(ref List<T[]> list, T[] t, int n, int m, int[] b, int M)        {            for (int i = n; i >= m; i--)            {                b[m - 1] = i - 1;                if (m > 1)                {                    GetCombination(ref list, t, i - 1, m - 1, b, M);                }                else                {                    if (list == null)                    {                        list = new List<T[]>();                    }                    T[] temp = new T[M];                    for (int j = 0; j < b.Length; j++)                    {                        temp[j] = t[b[j]];                    }                    list.Add(temp);                }            }        }        /// <summary>        /// 递归算法求排列(私有成员)        /// </summary>        /// <param name="list">返回的列表</param>        /// <param name="t">所求数组</param>        /// <param name="startIndex">起始标号</param>        /// <param name="endIndex">结束标号</param>        private static void GetPermutation(ref List<T[]> list, T[] t, int startIndex, int endIndex)        {            if (startIndex == endIndex)            {                if (list == null)                {                    list = new List<T[]>();                }                T[] temp = new T[t.Length];                t.CopyTo(temp, 0);                list.Add(temp);            }            else            {                for (int i = startIndex; i <= endIndex; i++)                {                    Swap(ref t[startIndex], ref t[i]);                    GetPermutation(ref list, t, startIndex + 1, endIndex);                    Swap(ref t[startIndex], ref t[i]);                }            }        }        #endregion        #region 公共方法        /// <summary>        /// 交换两个变量        /// </summary>        /// <param name="a">变量1</param>        /// <param name="b">变量2</param>        public static void Swap(ref T a, ref T b)        {            T temp = a;            a = b;            b = temp;        }        /// <summary>        /// 求从起始标号到结束标号的排列,其余元素不变        /// </summary>        /// <param name="t">所求数组</param>        /// <param name="startIndex">起始标号</param>        /// <param name="endIndex">结束标号</param>        /// <returns>从起始标号到结束标号排列的范型</returns>        public static List<T[]> GetPermutation(T[] t, int startIndex, int endIndex)        {            if (startIndex < 0 || endIndex > t.Length - 1)            {                return null;            }            List<T[]> list = new List<T[]>();            GetPermutation(ref list, t, startIndex, endIndex);            return list;        }        /// <summary>        /// 返回数组所有元素的全排列        /// </summary>        /// <param name="t">所求数组</param>        /// <returns>全排列的范型</returns>        public static List<T[]> GetPermutation(T[] t)        {            return GetPermutation(t, 0, t.Length - 1);        }        /// <summary>        /// 求数组中n个元素的排列        /// </summary>        /// <param name="t">所求数组</param>        /// <param name="n">元素个数</param>        /// <returns>数组中n个元素的排列</returns>        public static List<T[]> GetPermutation(T[] t, int n)        {            if (n > t.Length)            {                return null;            }            List<T[]> list = new List<T[]>();            List<T[]> c = GetCombination(t, n);            for (int i = 0; i < c.Count; i++)            {                List<T[]> l = new List<T[]>();                GetPermutation(ref l, c[i], 0, n - 1);                list.AddRange(l);            }            return list;        }        /// <summary>        /// 求数组中n个元素的组合        /// </summary>        /// <param name="t">所求数组</param>        /// <param name="n">元素个数</param>        /// <returns>数组中n个元素的组合的范型</returns>        public static List<T[]> GetCombination(T[] t, int n)        {            if (t.Length < n)            {                return null;            }            int[] temp = new int[n];            List<T[]> list = new List<T[]>();            GetCombination(ref list, t, t.Length, n, temp, n);            return list;        }        #endregion    }} 



[解决办法]
我没玩过24点啊,不知道游戏规则
[解决办法]
牛人我来了
[解决办法]
学习升星星
然后牛逼
[解决办法]
三连击了
[解决办法]
学习
[解决办法]




先留名 ,然后再看!!!^_^!!!
[解决办法]
up
[解决办法]
看。。。
[解决办法]
支持,看看
[解决办法]
不错
[解决办法]
占位学习
[解决办法]
good
[解决办法]
up
[解决办法]
学习
[解决办法]
学习,UP
[解决办法]
学习
[解决办法]
学习!
[解决办法]
高端东西~~
慢慢看~~
[解决办法]

[解决办法]
留名
[解决办法]
不错,看过EXCEL的算24,这个学习一下
[解决办法]
靠, 牛啊, 学习了
[解决办法]

[解决办法]
顶顶更健壮
[解决办法]
努力学习

[解决办法]
哈哈,好玩,jf
[解决办法]

[解决办法]
好久没来了 露个面 表示我存在
[解决办法]
学习~

[解决办法]
不错!~~
[解决办法]
下来自己做一下
[解决办法]

给楼主顶一个

[解决办法]
看看加学习
[解决办法]
支持
[解决办法]
顶。。
[解决办法]

------解决方案--------------------


up
[解决办法]
UP.......
[解决办法]
收藏
[解决办法]
#41楼 得分:0回复于:2010-01-21 17:09:53顶。。

[解决办法]
学习
[解决办法]
楼主牛,
[解决办法]
太强大了
[解决办法]
学习了!
[解决办法]

[解决办法]
jf
[解决办法]
支持一下楼主
[解决办法]
学习
[解决办法]
oo
[解决办法]
路过下
话说,其实表达式只有3种。。虽然这样的话看上去有一点奇怪。。。
a代表数,*代表操作符,
就只有
((a*b)*c)*d
(a*b)*(c*d)
a*(b*(c*d))

枚举这3种形式就够了

虽然这样输出结果里面括号很多....>.<
[解决办法]

探讨
引用:
不错,看过EXCEL的算24,这个学习一下

EXCEL怎么弄24点?不用宏行吗?

[解决办法]
学习了!


[解决办法]
mark 表达式计算类

[解决办法]
up
[解决办法]
学习来了~!
[解决办法]
强,这个要偷学过来。。
[解决办法]
nb,接分
[解决办法]
什么都不说,先顶下 再看,,,果真不一般。。。
[解决办法]
能顶就顶,,,一个劲的往上顶。。。。
[解决办法]
jf
[解决办法]
JF
[解决办法]
jf
[解决办法]
jf
[解决办法]
jf
[解决办法]
职业帮顶~
[解决办法]
UP
[解决办法]
.
[解决办法]
高手的代码必须好好学习~
[解决办法]
自叹不如啊,哎,悲哀
[解决办法]
嗯,不错,很久没有写过关于游戏方面的东西了。散点分给兄弟我吧!
------解决方案--------------------


jf
[解决办法]
jf
[解决办法]
jfjf
[解决办法]
jf up
[解决办法]
学习,谢谢分享。
[解决办法]
谢谢分享
[解决办法]
发现你的一个BUG
[解决办法]
学习!
[解决办法]
例如
算的时候有一次出现的结果是
7/3。。。。。
具体我忘了
但是结果是近似的 笔算的话是23点...........
不知道我说清楚没有
也就是说算法中你有吧INT转化成DOUBLe型
所以出现了无限循环小数问题


[解决办法]

探讨
     


先留名 ,然后再看!!!^_^!!!

[解决办法]
刚刚找到一个
7*(3/7+3)
[解决办法]
最喜欢游戏的源代码了,研究下
[解决办法]

[解决办法]
mark~~接分.....
[解决办法]
我记得又一次我算来一个近似值
呵呵
一切要证据说话
我找找看
呵呵 找到告诉你
不过你的程序已经很牛逼了
[解决办法]
强人啊
[解决办法]
纯接分

读书人网 >C#

热点推荐