扑克牌花色排列_扑克牌花色大小顺序图片

扑克牌花色排列_扑克牌花色大小顺序图片前阵子去某家公司笔试,发现有一道扑克牌排序的算法题,题目的大致意思是从一个给定的扑克牌文件读取内容,里面的内容是每行一个扑克牌牌面值,如♠J,♥Q,♣A,♦10等,要求对该文本进行两种排序,一种是按S

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

前阵子去某家公司笔试,发现有一道扑克牌排序的算法题,题目的大致意思是从一个给定的扑克牌文件读取内容,里面的内容是每行一个扑克牌牌面值,如♠J,♥Q,♣A,♦10等,要求对该文本进行两种排序,一种是按Suit,另一种是Rank;
如果原文本值为:
♠2
♠J
♥10
♠3
♣7
♦9
♠9
♦6
♠Q
♣4
♣6
♦A
则Suit输出方式为:♠Q ♠J ♠9 ♠3 ♠2 ♥10 ♦A ♦9 ♦6 ♣7 ♣6 ♣4 (此处suit的大小按照:♠,♥,♦,♣)
而Rank输出则为: ♦A ♠Q ♠J ♥10 ♠9 ♦9 ♣7 ♦6 ♣6 ♣4 ♠3 ♠2   

具体算法如下:
首先定义一个公共类Common,用于读取和写入文件:
  

扑克牌花色排列_扑克牌花色大小顺序图片
扑克牌花色排列_扑克牌花色大小顺序图片
View Code

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; namespace Test.Porker { public class Common { public static List<string> ReadFile(string srcFileName) { var list = new List<string>(); using (var sr = new StreamReader(srcFileName, Encoding.UTF8)) { string s = ""; while ((s = sr.ReadLine()) != null) { list.Add(s); } } return list; } public static void WriteFile(string desFileName,List<string> list) { using (var sw = new StreamWriter(desFileName, true, Encoding.UTF8)) { foreach (var item in list) { sw.WriteLine(item); } } } public static void GenerateRandPoker() { List<string> list = new List<string>(); for (int i = 2; i <= 14; i++) { if (i <= 10) { list.Add("" + i); list.Add("" + i); list.Add("" + i); list.Add("" + i); } else if (i == 11) { list.Add("♠J"); list.Add("♣J"); list.Add("♥J"); list.Add("♦J"); } else if (i == 12) { list.Add("♠Q"); list.Add("♣Q"); list.Add("♥Q"); list.Add("♦Q"); } else if (i == 13) { list.Add("♠K"); list.Add("♣K"); list.Add("♥K"); list.Add("♦K"); } else if (i == 14) { list.Add("♠A"); list.Add("♣A"); list.Add("♥A"); list.Add("♦A"); } } Random r = new Random(); for (int i = 0; i < 100; i++) { int n = r.Next(0, 51); int m = r.Next(0, 51); if (n != m) { string tmp = list[m]; list[m] = list[n]; list[n] = tmp; } } WriteFile(@"d:\CardSuit.txt", list); } } }

然后添加两个类,分别为SuitSort:

扑克牌花色排列_扑克牌花色大小顺序图片
扑克牌花色排列_扑克牌花色大小顺序图片
View Code

using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Test.Porker { public class SuitSort { public List<string> SuitList { get; set; } public SuitSort(List<string> list) { SuitList = list; } public void SortSuitList() { SuitList.Sort(SuitComparer); } private static int SuitComparer(string porkerA,string porkerB) { var a = GetPorkerNumber(porkerA); var b = GetPorkerNumber(porkerB); return a-b; } private static int GetPorkerNumber(string porker) { if (string.IsNullOrEmpty(porker)) { return 0; } var suitValue = 0; char c = porker[0]; //此处排序首先考虑的是花色,于是先把花色乘以一个常数区分开来 switch (c) { case '': suitValue = 100; break; case '': suitValue = 200; break; case '': suitValue = 300; break; case '': suitValue = 400; break; default: break; } var numStr = porker.Substring(1); var number = 0; //给几个特殊牌赋予一个整数值 switch (numStr) { case "A": number = 14; break; case "K": number = 13; break; case "Q": number = 12; break; case "J": number = 11; break; default: number =Convert.ToInt32(numStr); break; } //保证了每个花色都不是在一个数字区间段 number = (15 - number) + suitValue; return number; } } }

RankSort:

扑克牌花色排列_扑克牌花色大小顺序图片
扑克牌花色排列_扑克牌花色大小顺序图片
View Code

using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Test.Porker { public class RankSort { public List<string> RankList { get; set; } public RankSort(List<string> list) { RankList = list; } public void SortRankList() { RankList.Sort(SuitComparer); } private static int SuitComparer(string porkerA, string porkerB) { var a = GetPorkerNumber(porkerA); var b = GetPorkerNumber(porkerB); return a - b; } private static int GetPorkerNumber(string porker) { if (string.IsNullOrEmpty(porker)) { return 0; } var numStr = porker.Substring(1); var number = 0; //给几个特殊牌赋予一个整数值 switch (numStr) { case "A": number = 14; break; case "K": number = 13; break; case "Q": number = 12; break; case "J": number = 11; break; default: number = Convert.ToInt32(numStr); break; } //利用15-牌面数值,已达到大的排前面,小的排后面 //此处为了区别同一数字的不同花色,在此乘以了一个常数100()一副扑克的牌数总数即可 number = (15 - number) * 100; //不同的花色再加上一个偏移量,此处根据需要设置花色的大小,我这里的suit排序顺序为:黑、红、方、梅 char c = porker[0]; switch (c) { case '': number += 1; break; case '': number += 2; break; case '': number += 3; break; case '': number += 4; break; default: break; } return number; } } }

这样对于扑克排序的算法基本完成,下面即是验证;首先调用公共类里面的GenerateRandPoker随机生成一副乱序扑克,然后实例化两个类对象进行排序并输出:

扑克牌花色排列_扑克牌花色大小顺序图片
扑克牌花色排列_扑克牌花色大小顺序图片
View Code

 static void Main(string[] args) { Common.GenerateRandPoker(); var fileName = @"D:\CardSuit.txt"; SuitPorkerTest(fileName); RankPorkerTest(fileName); Console.ReadLine(); } static void SuitPorkerTest(string fileName) { var destFilename = @"D:\SortedSuitCard.txt"; var list = Common.ReadFile(fileName); SuitSort suitObj = new SuitSort(list); suitObj.SortSuitList(); Common.WriteFile(destFilename, suitObj.SuitList); } static void RankPorkerTest(string fileName) { var destFilename = @"D:\SortedRankCard.txt"; var list = Common.ReadFile(fileName); RankSort rankObj = new RankSort(list); rankObj.SortRankList(); Common.WriteFile(destFilename, rankObj.RankList); }

扑克文件为:

♣2
♦Q
♠K
♥6
♠4
♥7
♥8
♦2
♠6
♥2
♥J
♣K
♥A
♦3
♣5
♠A
♥Q
♦8
♦K
♦J
♦7
♦5
♦10
♥3
♥5
♣10
♣3
♥9
♠10
♣9
♥4
♠8
♠7
♣8
♥K
♣Q
♠5
♦4
♣A
♣J
♠2
♠J
♥10
♠3
♣7
♠9
♦9
♦6
♠Q
♣4
♣6
♦A
♦9
♠Q
♥3
♣6
♠J
♦K
♦J
♣10
♦5
♥2
♦4
♠9
♣7
♦6
♦7
♣8
♥4
♠7
♦Q
♣3
♥10
♥5
♣J
♥9
♦10
♣2
♦8
♦2
♥K
♠5
♥Q
♦3
♣Q
♣A
♣5
♠3
♠A
♥6
♠6
♥J
♣9
♣4
♠10
♠8
♠4
♣K
♠2
♠K
♥7
♥A
♥8
♦A

Suit排序结果为:

♠A,♠K,♠Q,♠J,♠10,♠9,♠8,♠7,♠6,♠5,♠4,♠3,♠2,♥A,♥K,♥Q,♥J,♥10,♥9,♥8,♥7,♥6,♥5,♥4,♥3,♥2,♦A,♦K,♦Q,♦J,♦10,♦9,♦8,♦7,♦6,♦5,♦4,♦3,♦2,♣A,♣K,♣Q,♣J,♣10,♣9,♣8,♣7,♣6,♣5,♣4,♣3,♣2

Rank排序结果为:

♠A,♥A,♦A,♣A,♠K,♥K,♦K,♣K,♠Q,♥Q,♦Q,♣Q,♠J,♥J,♦J,♣J,♠10,♥10,♦10,♣10,♠9,♥9,♦9,♣9,♠8,♥8,♦8,♣8,♠7,♥7,♦7,♣7,♠6,♥6,♦6,♣6,♠5,♥5,♦5,♣5,♠4,♥4,♦4,♣4,♠3,♥3,♦3,♣3,♠2,♥2,♦2,♣2

此处参考了 52张扑克牌排序算法 方法,在此引用和学习,希望见谅!

  

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/168141.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • visual studio 2015序列号_怎么激活win7旗舰版

    visual studio 2015序列号_怎么激活win7旗舰版我安装的是VisualStudioTeamSystem2008版本,适用版本90天。用了两个月后,每次打开出现提示:还有30天过期了,29天过期了,28天过期了。。。每次看到这个提示心中总有不爽。于是上网找序列号, 在网上找了好久,好像就一个序列号:PYHYP-WXB3B-B2CCM-V9DX9-VDY8T。 下面是win7的操作1,控制面板\程序\程序和

  • PhotoShop算法实现进阶-浮雕滤镜-灰度浮雕(三十一)

    PhotoShop算法实现进阶-浮雕滤镜-灰度浮雕(三十一)PhotoShop算法实现进阶-浮雕滤镜-灰度浮雕(三十一)kezunhai@gmail.comhttp://blog.csdn.net/kezunhai    浮雕效果可谓花样百出,但他们主要是基于图像相邻像素的差值来实现的。对于大多数图像而

  • 学计算机男生喜欢的礼物,十大00后男生喜欢的礼物大集合

    学计算机男生喜欢的礼物,十大00后男生喜欢的礼物大集合每个时代都有它流行的东西,自然不同时代的人喜欢的东西也不一样。00后的男生作为二十一世纪的第一批年轻男士,自然也有他们喜欢的东西。在这主要为大家盘点一些00后男生喜欢的礼物,每一件都充满创意和新奇的元素,送给00后男生不会拒绝。NO.1男士钛钢军牌00后男生并不是娇弱的妈宝男,他们也有血性方刚的一面,自然他们也想表现出霸气的一面。这款男士钛钢刻字军牌,美国大兵同款军牌项链,可以定制文字和照片,0…

  • 统计numpy数组中最频繁出现的值

    统计numpy数组中最频繁出现的值

    2021年11月22日
  • 两千块钱带来的 “希望”

    两千块钱带来的 “希望”

  • python爬取豆瓣电影榜单

    python爬取豆瓣电影榜单python爬取豆瓣电影榜单python爬取豆瓣电影榜单并保存到本地excel中,以后就不愁没片看了。目标确定我们想要抓取的电影的相关内容。抓取豆瓣top250电影的排名、电影名、评价(总结很到位)、评分、点评人数及电影的豆瓣页面。抓取各种电影类型的排行榜前100。编码省略需求到编码中间的繁文缛节,直接上手编码。(此处是最终编码)目标一使用BeautifulSoup解析页面查找元素。目标二调用接口处理返回的json数据。importrequestsimportopenpyx

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号