`
jacky
  • 浏览: 25966 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

4张扑克牌24点Ruby算法

阅读更多
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点算法

    ### Java扑克牌24点算法解析 #### 一、算法背景与目标 24点游戏是一种数字游戏,玩家需要利用给定的四个数字通过加、减、乘、除(可加括号)来使得最终计算结果等于24。在本算法实现中,使用Java语言编写了一个简单...

    高清的54张扑克牌图片素材资源

    这些图片通常包括52张标准扑克牌(黑桃、红心、梅花、方块四种花色,每种花色从 Ace 到 King 共13张)以及两张Joker牌。 高清图像的使用能够确保在各种设备上,无论是手机、平板还是电脑,用户都能享受到清晰、无...

    54张扑克牌(单张)

    2. **扑克牌设计**:一套完整的扑克牌包括54张牌,包括52张基本牌(13张红桃、黑桃、梅花和方块,每种牌面从A到K)以及两张特殊的牌,通常是大小王。每张牌的设计应当清晰、易于识别,并且具有版权许可,允许开发者...

    扑克牌全套54张素材

    1. **扑克牌**:扑克牌是一种广泛应用于各种游戏的工具,通常一套完整的扑克牌包括52张牌,分为四种花色:红桃(Hearts)、黑桃(Spades)、梅花(Clubs)和方块(Diamonds),每种花色有13张牌,从A到K。...

    54张纸牌扑克牌图片

    1. **扑克牌设计**:这组资源包含54张扑克牌的高清图片,每张牌都代表标准的扑克牌面值,从2到Ace,以及四种花色:红桃(Hearts)、黑桃(Spades)、梅花(Clubs)和方块(Diamonds)。此外,还有两张特殊的牌——...

    扑克牌52张单图

    一副完整的扑克牌共有52张,分为四种花色:红桃(Hearts)、黑桃(Spades)、梅花(Clubs)和方块(Diamonds)。每种花色有13张牌,分别是从A(Ace)到K(King)的13个等级。因此,"52张单图"意味着每个花色的每一种...

    54张高清全套扑克牌大图.rar

    【标题】"54张高清全套扑克牌大图.rar"所代表的知识点主要涉及图像处理、数字媒体和压缩技术。 在数字媒体领域,高清图像通常指的是具有较高分辨率的图像,可以提供更清晰、更细腻的视觉体验。"高清扑克牌大图"表明...

    一条SQL计算扑克牌24点

    一条SQL计算扑克牌24点

    按顺序扑克牌54张图片jpg

    标题中的“按顺序扑克牌54张图片jpg”意味着这个压缩包包含的是一套完整的扑克牌图像,每张牌按照标准顺序排列,从最小的2到最大的A(Ace),包括四种花色:红心(Hearts)、梅花(Clubs)、方块(Diamonds)和黑桃...

    java算法——玩家扑克牌

    在Java编程中,设计一个扑克牌游戏涉及到许多关键概念,如对象封装、枚举类型、集合框架以及排序算法。以下是对这些知识点的详细说明: 首先,我们从标题和描述出发,"java算法——玩家扑克牌"表明我们需要创建一个...

    54张扑克牌高清免抠版

    它们代表了这个资源的主要内容——一副完整的扑克牌,包含了从Ace到King的四种花色(红桃、黑桃、梅花和方块),每种花色有13张牌。 在使用这个资源时,开发者或设计师可以利用扑克牌的多样性和图案进行各种创意...

    扑克牌图片24点扑克牌素材

    24点游戏则是一种数学智力游戏,玩家需要通过加减乘除运算,使四张扑克牌上的数字得出结果为24。 【描述分析】:描述中的内容重复了标题,强调了“扑克牌图片”和“24点素材”,暗示这可能是一个包含用于教学或娱乐...

    扑克牌资源全套52张素材

    本资源包"扑克牌资源全套52张素材"提供了一套完整的扑克牌图像集,适用于各种项目需求,如游戏开发、图形设计、教学演示等。下面我们将详细探讨这套资源包中的知识点。 首先,资源包的格式为PNG,这是一种无损的...

    C经典算法之洗扑克牌(乱数排列)

    洗牌算法的核心在于如何使得每张牌出现在每个位置的概率都相等。本例中使用的算法步骤如下: - 首先,对数组进行初始化,将数组`poker`的每个元素赋值为其下标值。 - 使用`srand(time(0))`初始化随机数生成器,确保...

    扑克牌发牌洗牌评判算法

    (1) 能洗牌,发牌; (2) 每次发一手牌(5 张);...(4) 可以模拟发牌人,程序评估发牌人的牌,根据这手牌的质量, 发牌人可以抓一张、两张、或三张牌,换掉手中不要的牌, 然后程序重新评估发牌人的牌。

    精美的扑克牌素材 - 54张+卡背

    首先,"扑克.jpg"很可能是一个包含所有54张扑克牌的标准集合,每张牌的正面图案可能都经过精心设计,色彩鲜艳,细节丰富,适用于各种与扑克牌相关的项目。在游戏开发中,这样的素材可以用于创建虚拟扑克游戏,让玩家...

    C#模拟扑克牌发牌算法

    在C#编程中,模拟扑克牌发牌算法是一项常见的任务,尤其在开发桌面游戏或学习数据结构和算法时。这个任务涉及到对数组的操作、随机数生成以及逻辑控制,这些都是C#程序员必备的基础技能。以下是对这个主题的详细阐述...

    C#扑克牌24点计算游戏

    本篇将深入探讨一款基于C#语言开发的扑克牌24点计算游戏,让我们一起揭秘这款游戏的设计理念、实现方式以及其内在的算法逻辑。 首先,我们要理解游戏的基本规则:四张扑克牌,通过加减乘除(可使用括号)操作,目标...

    24点游戏 数据结构 4张扑克牌

    在这个项目中,我们将探讨多个基于数据结构和算法的编程任务,包括24点游戏、迷宫探索、二叉树遍历、数组应用、拓扑排序、图的遍历、八皇后问题、双链表创建以及公园导游图的最短路径。以下是各个任务的关键知识点:...

    54张扑克牌图片带洗牌源码(打乱顺序).zip

    这里提到的"54张扑克牌图片带洗牌源码(打乱顺序).zip"是一个示例,它包含了JavaScript实现的洗牌算法以及54张扑克牌的图片资源。这个压缩包提供了学习和实践这一算法的机会。 首先,54张扑克牌包括52张常规牌(每...

Global site tag (gtag.js) - Google Analytics