4张任意的扑克牌,用+,-,*,/,(,) 计算总合等于24的方法。
缺点:没有过滤重复的算法,比如
24=(4+(10+(11-1)))和24=(4+(-1)+(10+11))原本是一样的。
#
# count 4 random numbers(1-13) to 24 by using +,-,*,/,(,)
#
#
require 'mathn'
beginTime = Time.now
$opers = ['+','-','*','/']
def count24(total,data,str)
lack = getSymmetry(str)
lackNum = lack.abs
count = 0
cmd = ""
if data.size>2
data_backup = data.clone
i = 0
data_backup.each{ |number|
data = data_backup.clone
data.delete_at(i)
i +=1
$opers.each{ |op|
if op=='+'
cmd = str+"(" + number.to_s + "+"
count24(total-number.to_i,data,cmd)
elsif op=='-'
cmd = str+"(-" + number.to_s + ")+"
count24(total+number.to_i,data,cmd)
elsif op=='*'
cmd = str+number.to_s + "*("
count24(total.to_f/number.to_i,data,cmd)
elsif op=='*'
cmd = str+"(1\/" + number.to_s + ")*("
count24(total*number.to_i,data,cmd)
end
}
}
elsif data.size==2
n1 = data.at(0).to_i
n2 = data.at(1).to_i
ok = false
if total==n1 + n2
cmd = str+"(" + n1.to_s + "+" + n2.to_s + ")"
ok = true
elsif total==n1*n2
cmd = str+n1.to_s + "*" + n2.to_s
ok = true
end
if !ok && n1>n2
if n1-n2 == total
cmd = str+"(" + n1.to_s + "-"+n2.to_s + ")"
ok = true
elsif n1.to_f/n2==total.to_f
cmd = str+n1.to_s+ "/"+n2.to_s
ok = true
end
elsif !ok
if n2-n1 == total
cmd = str+ "(" + n2.to_s + "-" + n1.to_s + ")"
ok = true
elsif n2.to_f/n1 ==total.to_f
cmd = str+n2.to_s+"/"+n1.to_s
ok = true
end
end
(if lack<0
lackNum.downto(1){cmd ="("+cmd}
elsif lack>0
lackNum.downto(1){cmd +=")"}
end
puts "24="+cmd) if ok
end
end
def getSymmetry(str)
n_left = 0
n_right=0
return 0 if str==nil || str.length==0
for i in 0...str.length
if str[i,1]=='('
n_left+=1
elsif str[i,1]==')'
n_right+=1
end
end
return n_left-n_right
end
data = Array.[]();
while data.length<4
rn = rand(13)
data << (rn==0?13:rn)
end
data.each{|i| print i,","}
print "\n"
puts "---------------------"
count24(24,data,"")
puts "---------------------"
puts " "+((Time.now.to_i-beginTime.to_i)/1000).to_s + " s"
分享到:
相关推荐
### Java扑克牌24点算法解析 #### 一、算法背景与目标 24点游戏是一种数字游戏,玩家需要利用给定的四个数字通过加、减、乘、除(可加括号)来使得最终计算结果等于24。在本算法实现中,使用Java语言编写了一个简单...
从四种基本花色的A到K,再到两个Joker牌,每张牌都以高清晰度呈现,确保了扑克牌的细节和质感得到了尽可能真实的还原。这样的图像质量不仅保证了玩家在不同设备上都能获得高品质的游戏体验,而且也增加了游戏的沉浸...
2. **扑克牌设计**:一套完整的扑克牌包括54张牌,包括52张基本牌(13张红桃、黑桃、梅花和方块,每种牌面从A到K)以及两张特殊的牌,通常是大小王。每张牌的设计应当清晰、易于识别,并且具有版权许可,允许开发者...
1. **扑克牌**:扑克牌是一种广泛应用于各种游戏的工具,通常一套完整的扑克牌包括52张牌,分为四种花色:红桃(Hearts)、黑桃(Spades)、梅花(Clubs)和方块(Diamonds),每种花色有13张牌,从A到K。...
1. **扑克牌设计**:这组资源包含54张扑克牌的高清图片,每张牌都代表标准的扑克牌面值,从2到Ace,以及四种花色:红桃(Hearts)、黑桃(Spades)、梅花(Clubs)和方块(Diamonds)。此外,还有两张特殊的牌——...
一副完整的扑克牌共有52张,分为四种花色:红桃(Hearts)、黑桃(Spades)、梅花(Clubs)和方块(Diamonds)。每种花色有13张牌,分别是从A(Ace)到K(King)的13个等级。因此,"52张单图"意味着每个花色的每一种...
一条SQL计算扑克牌24点
这52张基本牌分为四种花色,每种花色有13张牌,分别是2、3、4、5、6、7、8、9、10、J、Q、K和A。而在这些数字和字母中,2是最小的,A(Ace)则是最大的。这四种花色分别是红心(Hearts)、方块(Diamonds)、梅花...
在Java编程中,设计一个扑克牌游戏涉及到许多关键概念,如对象封装、枚举类型、集合框架以及排序算法。以下是对这些知识点的详细说明: 首先,我们从标题和描述出发,"java算法——玩家扑克牌"表明我们需要创建一个...
它们代表了这个资源的主要内容——一副完整的扑克牌,包含了从Ace到King的四种花色(红桃、黑桃、梅花和方块),每种花色有13张牌。 在使用这个资源时,开发者或设计师可以利用扑克牌的多样性和图案进行各种创意...
24点游戏则是一种数学智力游戏,玩家需要通过加减乘除运算,使四张扑克牌上的数字得出结果为24。 【描述分析】:描述中的内容重复了标题,强调了“扑克牌图片”和“24点素材”,暗示这可能是一个包含用于教学或娱乐...
本资源包"扑克牌资源全套52张素材"提供了一套完整的扑克牌图像集,适用于各种项目需求,如游戏开发、图形设计、教学演示等。下面我们将详细探讨这套资源包中的知识点。 首先,资源包的格式为PNG,这是一种无损的...
这些扑克牌图片涵盖了52张标准扑克牌和两张王牌,总计54张。每张牌的图案、花纹、数字以及边缘都被细致地捕捉,以保持其原始的质感和色彩。这种全面而细致的展现方式,使得这套资源不仅适合于游戏爱好者和扑克牌收藏...
洗牌算法的核心在于如何使得每张牌出现在每个位置的概率都相等。本例中使用的算法步骤如下: - 首先,对数组进行初始化,将数组`poker`的每个元素赋值为其下标值。 - 使用`srand(time(0))`初始化随机数生成器,确保...
首先,"扑克.jpg"很可能是一个包含所有54张扑克牌的标准集合,每张牌的正面图案可能都经过精心设计,色彩鲜艳,细节丰富,适用于各种与扑克牌相关的项目。在游戏开发中,这样的素材可以用于创建虚拟扑克游戏,让玩家...
(1) 能洗牌,发牌; (2) 每次发一手牌(5 张);...(4) 可以模拟发牌人,程序评估发牌人的牌,根据这手牌的质量, 发牌人可以抓一张、两张、或三张牌,换掉手中不要的牌, 然后程序重新评估发牌人的牌。
这里提到的"54张扑克牌图片带洗牌源码(打乱顺序).zip"是一个示例,它包含了JavaScript实现的洗牌算法以及54张扑克牌的图片资源。这个压缩包提供了学习和实践这一算法的机会。 首先,54张扑克牌包括52张常规牌(每...
在C#编程中,模拟扑克牌发牌算法是一项常见的任务,尤其在开发桌面游戏或学习数据结构和算法时。这个任务涉及到对数组的操作、随机数生成以及逻辑控制,这些都是C#程序员必备的基础技能。以下是对这个主题的详细阐述...
本篇将深入探讨一款基于C#语言开发的扑克牌24点计算游戏,让我们一起揭秘这款游戏的设计理念、实现方式以及其内在的算法逻辑。 首先,我们要理解游戏的基本规则:四张扑克牌,通过加减乘除(可使用括号)操作,目标...
在这个项目中,我们将探讨多个基于数据结构和算法的编程任务,包括24点游戏、迷宫探索、二叉树遍历、数组应用、拓扑排序、图的遍历、八皇后问题、双链表创建以及公园导游图的最短路径。以下是各个任务的关键知识点:...