一副牌54张,除去大小王,52张,抽出40张,计算最大积分

问题描述

一副牌54张,除去大小王,52张,抽出40张,计算最大积分。积分规则如下牌型比较和分数:同花顺6分>铁支5分>葫芦4分>同花3分>顺子2分>三条1分>两对1分>对子1分>散牌0分。6分,同花顺为同一种花色的顺子,比如全部是黑桃的A,K,Q,J,10。5分,铁支为四张同样大小的牌,比如4个A。4分,葫芦为三张一样的带2张一样的,比如3个A带2个8。3分,同花为五张牌为一种花式。2分,顺子为5张牌是顺子但不同花。1分,三条是指有三个牌点数一样,两对是指有两个对子,对子是指有一个对子。0分,散牌是没有上面说的任何情况。阅卷方法:写一个方法实现如上题目,方法接受一个string类型参数,会有统一的测试数据来调用这写的方法。测试数据的格式是:1,52,113,94,13...空格分隔每一张牌,逗号前的数字1234对应黑桃红桃梅花方块,总共40张牌。也就是40张牌分成8组,每组5张,然后计算总分一组当中有两个对子+一个散牌,也只能算为一个对子+一个散牌即计分1分

解决方案

解决方案二:
引用楼主xiaozhenqing的回复:

一副牌54张,除去大小王,52张,抽出40张,计算最大积分。积分规则如下牌型比较和分数:同花顺6分>铁支5分>葫芦4分>同花3分>顺子2分>三条1分>两对1分>对子1分>散牌0分。6分,同花顺为同一种花色的顺子,比如全部是黑桃的A,K,Q,J,10。5分,铁支为四张同样大小的牌,比如4个A。4分,葫芦为三张一样的带2张一样的,比如3个A带2个8。3分,同花为五张牌为一种花式。2分,顺子为5张牌是顺子但不同花。1分,三条是指有三个牌点数一样,两对是指有两个对子,对子是指有一个对子。0分,散牌是没有上面说的任何情况。阅卷方法:写一个方法实现如上题目,方法接受一个string类型参数,会有统一的测试数据来调用这写的方法。测试数据的格式是:1,52,113,94,13...空格分隔每一张牌,逗号前的数字1234对应黑桃红桃梅花方块,总共40张牌。也就是40张牌分成8组,每组5张,然后计算总分一组当中有两个对子+一个散牌,也只能算为一个对子+一个散牌即计分1分

也就是40张牌分成8组,每组5张,然后计算总分既然如此,不是很简单了吗,每次只计算一组的5张牌,而7种牌型都是5张的,按分值从高到低判断,直到判定是某种情况为止。一张牌有两个属性(花色和数值),用两个变量存储一张牌。先把传入的字符串用空格分割,得到牌的数量,每张牌可以用逗号分割,或者subString截取获得花色和数值属性。剩下的就是逻辑判断。排序、比较等等,简单,但很麻烦,比较蛋疼就是了。要注意细节
解决方案三:
1.流程应该是Dictionary<int,int>创建一个键值对的数值2.key放类型1234value放40张随机的牌3.利用循环放入52张牌,或者放入测试数据。4.利用循环+随机取出40张放入另一个Dictionary<int,int>集合中5.这里有2两选择将40张按序分成8组或者随机分成8组(注意匹配第二个Dictionary<int,int>集合是否是随机出的,且是否有相同的)6.写一个switch将对中情况罗列将其加分
解决方案四:
是最大总分,不是总分,这区别大了40张牌有C(40,5)*C(35,5)*C(30,5)*C(25,5)*C(20,5)*C(15,5)*C(10,5)种组合每种组合分值不同要求得最大的,遍历不太现实啊.这题目最关键就是找到一个算法,来确定应该优先选择哪种组合
解决方案五:
引用2楼qq_19920727的回复:

1.流程应该是Dictionary<int,int>创建一个键值对的数值2.key放类型1234value放40张随机的牌3.利用循环放入52张牌,或者放入测试数据。4.利用循环+随机取出40张放入另一个Dictionary<int,int>集合中5.这里有2两选择将40张按序分成8组或者随机分成8组(注意匹配第二个Dictionary<int,int>集合是否是随机出的,且是否有相同的)6.写一个switch将对中情况罗列将其加分

2.key放类型1234value放40张随机的牌我应该理解成:使用一个Dictionary存储一张牌吗?如果理解成一个Dictionary存储多张牌,key是花色,那就错了,因为key是不允许重复,而花色只有1、2、3、4,牌的花色是可以重复的。这个问题上,不应该使用Dictionary,而应该使用数组+类或者数组+结构。一个简单的类或者结构就好:classWord{privateintcolor;//花色privateintvalue;//牌面值}
解决方案六:
存放到哪里其实都好说牌是固定40张,完全可以放到数组里比如int[40][2]
解决方案七:
引用3楼Z65443344的回复:

是最大总分,不是总分,这区别大了40张牌有C(40,5)*C(35,5)*C(30,5)*C(25,5)*C(20,5)*C(15,5)*C(10,5)种组合每种组合分值不同要求得最大的,遍历不太现实啊.这题目最关键就是找到一个算法,来确定应该优先选择哪种组合

哥们想得有道理。只是仔细琢磨过一下题目,需求应该就是指定一种组合,然后计算而已,并不是自由组合。如果要求自由组合,找到一种最优组合,那就要使用深度优先搜索算法,并保存当前的积分,进行恰当的剪枝了。
解决方案八:
引用4楼zhi_ai_yaya的回复:

Quote: 引用2楼qq_19920727的回复:
1.流程应该是Dictionary<int,int>创建一个键值对的数值2.key放类型1234value放40张随机的牌3.利用循环放入52张牌,或者放入测试数据。4.利用循环+随机取出40张放入另一个Dictionary<int,int>集合中5.这里有2两选择将40张按序分成8组或者随机分成8组(注意匹配第二个Dictionary<int,int>集合是否是随机出的,且是否有相同的)6.写一个switch将对中情况罗列将其加分

2.key放类型1234value放40张随机的牌我应该理解成:使用一个Dictionary存储一张牌吗?如果理解成一个Dictionary存储多张牌,key是花色,那就错了,因为key是不允许重复,而花色只有1、2、3、4,牌的花色是可以重复的。这个问题上,不应该使用Dictionary,而应该使用数组+类或者数组+结构。一个简单的类或者结构就好:classWord{privateintcolor;//花色privateintvalue;//牌面值}

哦对哦这倒是那如果这样呢Dictionary<int,int[]>d=newDictionary<int,int[]>();如果是固定测试数据的吧通过key存花色value存牌组这样貌似就好了
解决方案九:
引用7楼qq_19920727的回复:

哦对哦这倒是那如果这样呢Dictionary<int,int[]>d=newDictionary<int,int[]>();如果是固定测试数据的吧通过key存花色value存牌组这样貌似就好了

是可以的,但是这样可能会导致一些问题,比如int[]这个数组长度不一致,而且可能出现缺少某种花色,处理起来就比较麻烦啦!Dictionary是用于建立键-值映射的,这是一个字典功能,专门用于快速查找和映射。
解决方案十:
引用6楼zhi_ai_yaya的回复:

Quote: 引用3楼Z65443344的回复:
是最大总分,不是总分,这区别大了40张牌有C(40,5)*C(35,5)*C(30,5)*C(25,5)*C(20,5)*C(15,5)*C(10,5)种组合每种组合分值不同要求得最大的,遍历不太现实啊.这题目最关键就是找到一个算法,来确定应该优先选择哪种组合

哥们想得有道理。只是仔细琢磨过一下题目,需求应该就是指定一种组合,然后计算而已,并不是自由组合。如果要求自由组合,找到一种最优组合,那就要使用深度优先搜索算法,并保存当前的积分,进行恰当的剪枝了。

这关键是以怎样的规则组合
解决方案十一:
引用9楼xiaozhenqing的回复:

Quote: 引用6楼zhi_ai_yaya的回复:
Quote: 引用3楼Z65443344的回复:
是最大总分,不是总分,这区别大了40张牌有C(40,5)*C(35,5)*C(30,5)*C(25,5)*C(20,5)*C(15,5)*C(10,5)种组合每种组合分值不同要求得最大的,遍历不太现实啊.这题目最关键就是找到一个算法,来确定应该优先选择哪种组合

哥们想得有道理。只是仔细琢磨过一下题目,需求应该就是指定一种组合,然后计算而已,并不是自由组合。如果要求自由组合,找到一种最优组合,那就要使用深度优先搜索算法,并保存当前的积分,进行恰当的剪枝了。

这关键是以怎样的规则组合

这真要找一个最优解,很难啊!我能想到的一个寻找局部满意解的算法就是使用贪心算法:在40张牌中,先找一个最高分的5张组合;然后在剩下的35张牌中,再递归使用贪心算法。这样简单,而且能获得一个总分满意解。
解决方案十二:
引用10楼zhi_ai_yaya的回复:

Quote: 引用9楼xiaozhenqing的回复:
Quote: 引用6楼zhi_ai_yaya的回复:
Quote: 引用3楼Z65443344的回复:
是最大总分,不是总分,这区别大了40张牌有C(40,5)*C(35,5)*C(30,5)*C(25,5)*C(20,5)*C(15,5)*C(10,5)种组合每种组合分值不同要求得最大的,遍历不太现实啊.这题目最关键就是找到一个算法,来确定应该优先选择哪种组合

哥们想得有道理。只是仔细琢磨过一下题目,需求应该就是指定一种组合,然后计算而已,并不是自由组合。如果要求自由组合,找到一种最优组合,那就要使用深度优先搜索算法,并保存当前的积分,进行恰当的剪枝了。

这关键是以怎样的规则组合

这真要找一个最优解,很难啊!我能想到的一个寻找局部满意解的算法就是使用贪心算法:在40张牌中,先找一个最高分的5张组合;然后在剩下的35张牌中,再递归使用贪心算法。这样简单,而且能获得一个总分满意解。

就怕一个同花顺破坏了5个铁支。。。好难啊
解决方案十三:
引用11楼u012948520的回复:

Quote: 引用10楼zhi_ai_yaya的回复:
Quote: 引用9楼xiaozhenqing的回复:
Quote: 引用6楼zhi_ai_yaya的回复:
Quote: 引用3楼Z65443344的回复:
是最大总分,不是总分,这区别大了40张牌有C(40,5)*C(35,5)*C(30,5)*C(25,5)*C(20,5)*C(15,5)*C(10,5)种组合每种组合分值不同要求得最大的,遍历不太现实啊.这题目最关键就是找到一个算法,来确定应该优先选择哪种组合

哥们想得有道理。只是仔细琢磨过一下题目,需求应该就是指定一种组合,然后计算而已,并不是自由组合。如果要求自由组合,找到一种最优组合,那就要使用深度优先搜索算法,并保存当前的积分,进行恰当的剪枝了。

这关键是以怎样的规则组合

这真要找一个最优解,很难啊!我能想到的一个寻找局部满意解的算法就是使用贪心算法:在40张牌中,先找一个最高分的5张组合;然后在剩下的35张牌中,再递归使用贪心算法。这样简单,而且能获得一个总分满意解。

就怕一个同花顺破坏了5个铁支。。。好难啊

5个铁支就是5个同花顺了,那就4个铁支吧
解决方案十四:
1个同花顺+4葫芦,22分4个铁枝,20分如果破坏了之后都能形成葫芦,反而分值更高啊.反之如果不能形成葫芦,分值会降低.当然还跟剩余的牌到底能形成什么有关系.要找最优解,很难啊.遍历是保证可以,就是会超慢.情况太多了.
解决方案十五:
最大好像是8组同花顺2组金刚一个对子48+10+1=59分
解决方案:
引用13楼Z65443344的回复:

1个同花顺+4葫芦,22分4个铁枝,20分如果破坏了之后都能形成葫芦,反而分值更高啊.反之如果不能形成葫芦,分值会降低.当然还跟剩余的牌到底能形成什么有关系.要找最优解,很难啊.遍历是保证可以,就是会超慢.情况太多了.

如上面所言,一个简单的贪心算法就可以得到一个局部最优解、全局满意解,应该是最合理的解决方案了。
解决方案:
最可怕的是如果有AKQJ10同花顺,可能会破坏AAAA的铁枝而其实同时有KQJ109的同花顺,这个很难判断啊...

时间: 2024-10-21 22:18:09

一副牌54张,除去大小王,52张,抽出40张,计算最大积分的相关文章

现状:团购业二次洗牌后“剩者为王”

摘要: 徐茂栋分析说,互联网影院将靠提高入座率提高利用率.降低成本,为消费者提供降价的价值.生活服务电子商务对人类生活的影响是深远的,这是一种革命,这种革命来得比预料更早 徐茂栋分析说,互联网影院将靠提高入座率提高利用率.降低成本,为消费者提供降价的价值.生活服务电子商务对人类生活的影响是深远的,这是一种革命,这种革命来得比预料更早一些. 嘉宾正在专注倾听现场发言. 活动现场气氛融洽而热烈. 深圳晚报总编辑丁时照对话窝窝团董事长兼CEO徐茂栋. 11月4日,壬辰入秋,是日北京大雪没膝,鹏城丽阳高

django-Python PIL Django如何将一张任意大小的图片改成指定大小而不产生挤压例如instagram

问题描述 Python PIL Django如何将一张任意大小的图片改成指定大小而不产生挤压例如instagram 如题目,我想知道intsagram那种软件,图片是怎样处理的,我试过很多方法都失败了. 直接用PIL的按比例缩图得到得图片不满足我想要得要求 比如一张1058*900得图片我想改成300*300用什么方法比较好而且能最大得保留图片不受挤压? 在instagram上 无论我上传得图片是多大得,什么样子得尺寸最后展示得都是正方形,我想知道是怎样实现得

思科SDN战略两副牌:一副开源牌,一副专有牌

众所周知,目前在SDN技术领域,主要存在着两大技术流派,一个是开源SDN技术,另一个是专有SDN技术,而在这两个阵营中分别都出现了比较成熟和优秀的技术.那么,我们今天就先来关注一下作为全球网络解决方案的主要提供商思科对开源SDN与专有SDN方面的理解,与其近期所作出的相关举措. 在上周的新闻中,大家可能都看到了有关"中国ODL(OpenDayLight)技术实践峰会"的相关新闻,在这次SDN(软件定义网络)行业盛会上吸引了来自电信运营商.互联网运营商.行业领先厂商.教研及学术机构的众多

12306最新揭秘:一张身份证能买同次列车两张票

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 中广网北京8月17日消息(记者 汤一亮)据中国之声<央广新闻>报道,近日,<一张身份证能买同次列车两张票 12306称怪系统>一文在网上被大量转载,引起了网友热议.网友与文中的用一张身份证买到同次列车两张票的当事人王女士(化名)一样,对火车票实名制表示困惑和质疑.新华社记者致电12306客服人员对此进行了解答. 在新华

sql server 2008-欲使这组数据满足第3范式,则需创建多少张表?范式不是针对一张表而言的吗?

问题描述 欲使这组数据满足第3范式,则需创建多少张表?范式不是针对一张表而言的吗? 这张初始表是一组菜单数据,从左到右依次是序号.菜名.菜的主食.菜的种类. 我的理解是,范式是针对一张表而言的,而这道题要求把一张表分成好几张表,才能满足第3范式,这是怎么回事呢?点击图片左下方的"全部展开"可以看到全图.CSDN看图的这点设置略坑啊.别人还以为我只发了半张图. 解决方案 点击图片左下方的"全部展开"可以看到全图.CSDN看图的这点设置略坑啊.别人还以为我只发了半张图.

sql使用触发器当一张表插入数据就往另一张表插入数据

问题描述 sql使用触发器当一张表插入数据就往另一张表插入数据 日期格式是这样的但是使用触发器当上图插入了一条数据就往下图插入相同的数据,如下图为什么日期格式不一样呢? 解决方案 SQL(二) 将一张表数据插入另外一张表从表中插入数据到另外一张表oracle 将一张表的数据插入到另一张表 解决方案二: 日期格式的问题,先确保两张表对应列的数字类型一致,插入使用convert格式化一下:CONVERT(varchar(10), GETDATE(), 111).

数据库中把一张表中的值传给另一张表中相同的字段

问题描述 数据库中把一张表中的值传给另一张表中相同的字段 数据库中有两张表A,B,大部分字段相同,A表中没有数据,要把B表中的数据传给A表中相对应的字段 解决方案 11两种情况 2.B表中的行在A表中都有,A表仅是缺少部分数据列 UPDATE A SET A.F1 = B.F1,A.F2=B.F2 FROM B WHERE A.Id = B.Id AND B.Filter=... 3.B表中的数据未必在A表中都用,A表不仅缺数据列,还缺数据行.要执行两句(MSSQL) INSERT INTO A

平安银行王牧天:两张卡就够用

从中国台湾到上海,平安银行信用卡事业部副总经理王牧天用了16年信用卡.但不像很多人想的那样,爱用信用卡的人喜欢"超前"消费,相反,王牧天属于相当"稳健"的人.他认为,信用卡两张就够,一定要量力而为;不要把超过三分之一的资产投入股市. 安全第一 1993年起,王牧天在台湾进入信用卡行业.也从这个时候开始,他有了第一张信用卡. "第一张卡的额度大概4000块人民币左右."他笑着说,"我用信用卡并不算早,不像现在,很多大学生都有了信用卡.&q

百度副总裁向海龙:已收录超一万亿张网页

中介交易 SEO诊断 淘宝客 云主机 技术大厅 [摘要]向海龙指出,一万亿张网页相当于5000个国家图书馆的信息量总和. 腾讯科技讯(乐天)5月29日消息,百度副总裁向海龙今日在2014年百度联盟峰会上表示, 全球信息量呈几何式跃升,从2005年的130EB(1EB=10亿GB)到2015年的8000+EB,10年增长66倍.来自可穿戴设备.LBS.语音.网络图片.视频等数据类型越来越丰富. 向海龙指出,百度已收录全世界超过一万亿张网页,这相当于5000个国家图书馆的信息量总和.百度还承担着每天