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语言编写了一个简单...
这些图片通常包括52张标准扑克牌(黑桃、红心、梅花、方块四种花色,每种花色从 Ace 到 King 共13张)以及两张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张单图"意味着每个花色的每一种...
【标题】"54张高清全套扑克牌大图.rar"所代表的知识点主要涉及图像处理、数字媒体和压缩技术。 在数字媒体领域,高清图像通常指的是具有较高分辨率的图像,可以提供更清晰、更细腻的视觉体验。"高清扑克牌大图"表明...
一条SQL计算扑克牌24点
标题中的“按顺序扑克牌54张图片jpg”意味着这个压缩包包含的是一套完整的扑克牌图像,每张牌按照标准顺序排列,从最小的2到最大的A(Ace),包括四种花色:红心(Hearts)、梅花(Clubs)、方块(Diamonds)和黑桃...
在Java编程中,设计一个扑克牌游戏涉及到许多关键概念,如对象封装、枚举类型、集合框架以及排序算法。以下是对这些知识点的详细说明: 首先,我们从标题和描述出发,"java算法——玩家扑克牌"表明我们需要创建一个...
它们代表了这个资源的主要内容——一副完整的扑克牌,包含了从Ace到King的四种花色(红桃、黑桃、梅花和方块),每种花色有13张牌。 在使用这个资源时,开发者或设计师可以利用扑克牌的多样性和图案进行各种创意...
24点游戏则是一种数学智力游戏,玩家需要通过加减乘除运算,使四张扑克牌上的数字得出结果为24。 【描述分析】:描述中的内容重复了标题,强调了“扑克牌图片”和“24点素材”,暗示这可能是一个包含用于教学或娱乐...
本资源包"扑克牌资源全套52张素材"提供了一套完整的扑克牌图像集,适用于各种项目需求,如游戏开发、图形设计、教学演示等。下面我们将详细探讨这套资源包中的知识点。 首先,资源包的格式为PNG,这是一种无损的...
洗牌算法的核心在于如何使得每张牌出现在每个位置的概率都相等。本例中使用的算法步骤如下: - 首先,对数组进行初始化,将数组`poker`的每个元素赋值为其下标值。 - 使用`srand(time(0))`初始化随机数生成器,确保...
(1) 能洗牌,发牌; (2) 每次发一手牌(5 张);...(4) 可以模拟发牌人,程序评估发牌人的牌,根据这手牌的质量, 发牌人可以抓一张、两张、或三张牌,换掉手中不要的牌, 然后程序重新评估发牌人的牌。
首先,"扑克.jpg"很可能是一个包含所有54张扑克牌的标准集合,每张牌的正面图案可能都经过精心设计,色彩鲜艳,细节丰富,适用于各种与扑克牌相关的项目。在游戏开发中,这样的素材可以用于创建虚拟扑克游戏,让玩家...
在C#编程中,模拟扑克牌发牌算法是一项常见的任务,尤其在开发桌面游戏或学习数据结构和算法时。这个任务涉及到对数组的操作、随机数生成以及逻辑控制,这些都是C#程序员必备的基础技能。以下是对这个主题的详细阐述...
本篇将深入探讨一款基于C#语言开发的扑克牌24点计算游戏,让我们一起揭秘这款游戏的设计理念、实现方式以及其内在的算法逻辑。 首先,我们要理解游戏的基本规则:四张扑克牌,通过加减乘除(可使用括号)操作,目标...
在这个项目中,我们将探讨多个基于数据结构和算法的编程任务,包括24点游戏、迷宫探索、二叉树遍历、数组应用、拓扑排序、图的遍历、八皇后问题、双链表创建以及公园导游图的最短路径。以下是各个任务的关键知识点:...
这里提到的"54张扑克牌图片带洗牌源码(打乱顺序).zip"是一个示例,它包含了JavaScript实现的洗牌算法以及54张扑克牌的图片资源。这个压缩包提供了学习和实践这一算法的机会。 首先,54张扑克牌包括52张常规牌(每...