24点游戏的诀窍技巧是什么

C#实现的24点游戏实例详解
作者:北风其凉
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了C#实现的24点游戏,较为详细的分析了24点游戏的算法原理与实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
本文实例分析了C#实现的24点游戏。分享给大家供大家参考。具体如下:
1. 24点游戏规则及算法
规则:给出4个自然数,找出能够求出24的四则运算式,要求数字不能重复使用
本算法是一种暴力求解法:
给出任意两个数字,可以进行6种四则运算,求出最多6个值。以数字a和b为例,有:
加(a+b)、减(a-b)、被减(b-a)、乘以(a*b)、除以(a/b)和除(b/a)
abcd共计四个数,如果顺序固定,则有5种计算顺序(★代表上面6种四则运算中的一种):
((a★b)★c)★d、(a★b)★(c★d)、(a★(b★c))★d、a★((b★c)★d)、a★(b★(c★d))
给出的四个数字,n1n2n3n4,有4*3*2=24种全排列的方法
2. 相关函数
/// &summary&
/// 判断abcd四个数进行任意四则运算后能不能得出24,每个数字只能用一次
/// &/summary&
/// &param name="a"&数字a&/param&
/// &param name="b"&数字b&/param&
/// &param name="c"&数字c&/param&
/// &param name="d"&数字d&/param&
/// &param name="expression"&&/param&
/// &returns&&/returns&
private static bool Try24(int a, int b, int c, int d, ref string expression)
if (TryEach(a, b, c, d, ref expression))
if (TryEach(a, b, d, c, ref expression))
if (TryEach(a, c, b, d, ref expression))
if (TryEach(a, c, d, b, ref expression))
if (TryEach(a, d, b, c, ref expression))
if (TryEach(a, d, c, b, ref expression))
if (TryEach(b, a, c, d, ref expression))
if (TryEach(b, a, d, c, ref expression))
if (TryEach(b, c, a, d, ref expression))
if (TryEach(b, c, d, a, ref expression))
if (TryEach(b, d, a, c, ref expression))
if (TryEach(b, d, c, a, ref expression))
if (TryEach(c, a, b, d, ref expression))
if (TryEach(c, a, d, b, ref expression))
if (TryEach(c, b, a, c, ref expression))
if (TryEach(c, b, c, a, ref expression))
if (TryEach(c, d, a, b, ref expression))
if (TryEach(c, d, b, a, ref expression))
if (TryEach(d, a, b, c, ref expression))
if (TryEach(d, a, c, b, ref expression))
if (TryEach(d, b, a, c, ref expression))
if (TryEach(d, b, c, a, ref expression))
if (TryEach(d, c, a, b, ref expression))
if (TryEach(d, c, b, a, ref expression))
/// &summary&
/// 判断指定顺序的四个数abcd进行任意四则运算后能不能得出24,每个数字只能用一次
/// &/summary&
/// &param name="a"&数字1&/param&
/// &param name="b"&数字2&/param&
/// &param name="c"&数字3&/param&
/// &param name="d"&数字4&/param&
/// &param name="expression"&&/param&
/// &returns&&/returns&
private static bool TryEach(int a, int b, int c, int d, ref string expression)
expression = "";
//两个数可以做6种运算:加、减、被减、乘以、除以、除
//四个数共可以进行6*6*6=216种不同次序的四则运算
//初始化数组
for (int i = 0; i & 6 * 6 * 6; i++)
//a与b间的运算符:i / 36
//b与c间的运算符:i % 36 / 6
//c与d间的运算符:i % 6
//1.运算顺序:a和b,再和c,再和d
string expression1 = "", expression2 = "";
int temp1 = ResultOf(a, b, i / 36, ref expression1);
int temp2 = ResultOf(temp1, c, i % 36 / 6, ref expression2, expression1);
int result = ResultOf(temp2, d, i % 6, ref expression, expression2);
if (result == 24)
//2.运算顺序:a和b,c和d,前面部分和后面部分
string expression1 = "", expression2 = "";
int temp1 = ResultOf(a, b, i / 36, ref expression1);
int temp2 = ResultOf(c, d, i % 6, ref expression2);
int result = ResultOf(temp1, temp2, i % 36 / 6,
ref expression, expression1, expression2);
if (result == 24)
//3.运算顺序:b和c运算,再与a运算,再与d运算
string expression1 = "", expression2 = "";
int temp1 = ResultOf(b, c, i % 36 / 6, ref expression1);
int temp2 = ResultOf(a, temp1, i / 36, ref expression2, "", expression1);
int result = ResultOf(temp2, d, i % 6, ref expression, expression2);
if (result == 24)
//4.运算顺序:b和c运算,再与d运算,再与a运算
string expression1 = "", expression2 = "";
int temp1 = ResultOf(b, c, i % 36 / 6, ref expression1);
int temp2 = ResultOf(temp1, d, i % 6, ref expression2, expression1);
int result = ResultOf(a, temp2, i / 36, ref expression, "", expression2);
if (result == 24)
//5.运算顺序:c和d运算,再和b运算,再和a运算
string expression1 = "", expression2 = "";
int temp1 = ResultOf(c, d, i % 6, ref expression1);
int temp2 = ResultOf(b, temp1, i % 36 / 6, ref expression2, "", expression1);
int result = ResultOf(a, temp2, i / 36, ref expression, "", expression2);
if (result == 24)
expression = "Abandoned";
/// &summary&
/// 求两数进行某一四则运算后的结果
/// &/summary&
/// &param name="x"&数字1&/param&
/// &param name="y"&数字2&/param&
/// &param name="method"&(0-5分别代表:加、减、被减、乘以、除以、除)&/param&
/// &param name="expression"&返回的表达式&/param&
/// &param name="expressionLeft"&数字1表达式&/param&
/// &param name="expressionRight"&数字2表达式&/param&
/// &returns&&/returns&
private static int ResultOf(int x, int y, int method,
ref string expression, string expressionLeft = "", string expressionRight = "")
//左右表达式之前被判定为无效则不计算,除数为0时不计算
if (expressionLeft == "Abandoned" || expressionRight == "Abandoned" ||
(x == 0 && method == 5) || (y == 0 && method == 4))
expression = "Abandoned";
return -1;
int result = 0;
switch (method)
result = x +
expression = string.Format("{0}+{1}",
expressionLeft == "" ? x.ToString() : expressionLeft,
expressionRight == "" ? y.ToString() : expressionRight);
result = x -
expression = string.Format("{0}-{1}",
expressionLeft == "" ? x.ToString() : expressionLeft,
expressionRight == "" ? y.ToString() : expressionRight);
result = y -
expression = string.Format("{1}-{0}",
expressionLeft == "" ? x.ToString() : expressionLeft,
expressionRight == "" ? y.ToString() : expressionRight);
result = x *
expression = string.Format("({0})*({1})",
expressionLeft == "" ? x.ToString() : expressionLeft,
expressionRight == "" ? y.ToString() : expressionRight);
if (x % y == 0)
result = x /
expression = string.Format("({0})/({1})",
expressionLeft == "" ? x.ToString() : expressionLeft,
expressionRight == "" ? y.ToString() : expressionRight);
expression = "Abandoned";
if (y % x == 0)
result = y /
expression = string.Format("({1})/({0})",
expressionLeft == "" ? x.ToString() : expressionLeft,
expressionRight == "" ? y.ToString() : expressionRight);
expression = "Abandoned";
//运算不合法,则返回-1,表达式为Abandoned,
if (expression == "Abandoned")
return -1;
3. Main函数调用
static void Main(string[] args)
string s = "";
bool try24;
try24 = Try24(1, 2, 3, 4, ref s); Console.WriteLine("1,2,3,4: " + s);
try24 = Try24(1, 3, 5, 7, ref s); Console.WriteLine("1,3,5,7: " + s);
try24 = Try24(2, 3, 6, 4, ref s); Console.WriteLine("2,3,6,4: " + s);
try24 = Try24(5, 7, 9, 4, ref s); Console.WriteLine("5,7,9,4: " + s);
try24 = Try24(6, 3, 4, 5, ref s); Console.WriteLine("6,3,4,5: " + s);
try24 = Try24(9, 5, 2, 7, ref s); Console.WriteLine("9,5,2,7: " + s);
try24 = Try24(4, 9, 8, 3, ref s); Console.WriteLine("4,9,8,3: " + s);
try24 = Try24(4, 9, 8, 2, ref s); Console.WriteLine("4,9,8,2: " + s);
try24 = Try24(10, 10, 10, 10, ref s); Console.WriteLine("10,10,10,10: " + s);
Console.ReadLine();
4. 程序运行结果:
希望本文所述对大家的C#程序设计有所帮助。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具Access denied |
used Cloudflare to restrict access
Please enable cookies.
What happened?
The owner of this website () has banned your access based on your browser's signature (3b9c27d-ua98).当前位置:>24点游戏技巧
操作系统:
应用介绍:
一款益智类的小游戏,通过提供的数字和加减乘除符号来进行换算,算出21就是胜利。
Android / iOS
24点游戏技巧相关应用
24点游戏技巧相关文章
愤怒的公牛(PBR: Raging Bulls)这是一款以挑战公牛为主的游戏。想成为美国PBR斗牛的冠军吗?如何才能征服一头头桀骜不驯的公牛呢?快来和小编一起看
本文章总结了台球大师手机游戏攻略各种玩法,以及台球大师游戏的新老玩家的一些自己对游戏的技巧,经验分享,有需要的朋友可参考一下
星际塔防是安卓平台上的一款以次时代的星际为题材的策略塔防类游戏,这款游戏的画面设计的十分精致,玩家可以在游戏中体验到十分紧凑的游戏节奏,玩家在游戏中的主要任务就
萌萌哒的休闲游戏病毒战争对于关卡如何过我想是众多玩家最关注的攻略点吧,然而如何才能更好的通关呢?接下来小编就为大家带来通关技巧解析,一起来看看。
  三国之刃天梯赛技巧分享 独家游戏玩法,还不知道的小伙伴快点来看看今天的精彩攻略吧!希望历趣小编带来的这篇攻略能帮助到大家。
  【参与条件】
  全民砰砰砰凑凑砰怎么玩?全民砰砰砰凑凑砰和其他砰玩法差不多,就是在规定时间内移动同色的图块全部链接在一起即可通关,下面小编给玩友们带来了全民砰砰砰凑凑砰玩法
《吕小布传奇》不仅在玩法上给大家带来了各种爽快的体验,同时也让大家在游戏上获得了更多快乐。所以,在这里,除了玩游戏爽到不行的基础上,身为经历过测试玩家的我也为大
软妹天国游戏中有哪些福利?软妹天国有哪些游戏技巧?今天小编就带大家来看看游戏有哪些不为人知的游戏技巧,一起来看看吧~
1、 签到礼包是7天一轮回的
先祝寻秦记2越做越好,玩的人越来越多吧。
如果你是土豪,看到这里就返回吧,直接进入游戏充值v7891011就好了。
新手赠言:养成游戏,就是慢慢养的
保卫萝卜3想要每个关卡中都顺利的获得金萝卜,那么你就要了解这款游戏的通关技巧,找到游戏中的窍门,当然这东西不是一两天能找到的所以,下面小编就为各位玩家带来保卫萝
1000万+人气1.1000万+人气2.10万+人气3.100万+人气4.9000万+人气5.100万+人气6.1000万+人气7.1000万+人气8.1万+人气9.9000万+人气10.
版权所有 京ICP备号-5
京公网安备 50 备}

我要回帖

更多关于 玩24点游戏是什么 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信