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

扑克牌花色排列_扑克牌花色大小顺序图片前阵子去某家公司笔试,发现有一道扑克牌排序的算法题,题目的大致意思是从一个给定的扑克牌文件读取内容,里面的内容是每行一个扑克牌牌面值,如♠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)


相关推荐

  • 交通信号灯控制器C语言代码,交通信号灯控制器代码及说明.doc

    交通信号灯控制器C语言代码,交通信号灯控制器代码及说明.docPAGEPAGE3课程设计报告课程名称:FPGA现代数字系统设计设计名称:交通信号灯控制器姓名:***学号:2010000379专业:通信指导教师:***起止日期:2010.12.25-2011.1.9课程设计任务书设计名称:设计要求:(1)设计一个交通信号灯控制器…

  • 分部类(Partial Classes)

    分部类(Partial Classes)

  • 呕心沥血整理的的嵌入式学习路线[通俗易懂]

    呕心沥血整理的的嵌入式学习路线[通俗易懂]曾经是某见的教学总监,我带出来的学生也有大几千了,基本都从事linux相关工作。网上看了很多的嵌入式学习路线,有的还凑活,有的纯粹是打广告卖板子,有的东拼西凑,简直是嵌入式劝退指南。大致给你梳理一下我从事的一个嵌入式的课程培训体系吧。基础1.linux基本操作:个人建议只要会一些基本的操作就行了,不需要太深入的学习每一个命令,用到的时候会去搜索就行了。需要掌握的知识如下:环境的搭建;Linux目录结构;文件类型;基本目录操作,文件操作,vim,ifconfig,ping,cd,cp,m

  • JS 怎么控制 checkbox 选中

    JS 怎么控制 checkbox 选中2019独角兽企业重金招聘Python工程师标准>>>…

  • 500-内部服务器错误_win7无法启动server服务错误1083

    500-内部服务器错误_win7无法启动server服务错误1083我们在操作win10系统电脑的时候,常常会遇到win10系统提示http500内部服务器错误的情况,想必大家都遇到过win10系统提示http500内部服务器错误的情况吧,那么应该怎么处理win10系统提示http500内部服务器错误呢?我们依照在ie浏览器中点击右上角的设置按钮,在弹出的菜单中点击“internet选项”按钮;在internet选项界面切换到【高级】选卡;这样的步骤就行…

  • PostgreSQL数据库备份和恢复

    PostgreSQL数据库备份和恢复一、备份1、cmd到PostgreSQL安装目录bin下2、备份命令pg_dump-h192.168.100.23-Upostgrespostgres>D:\postgres.bak3、指令解释如上命令,pg_dump是备份数据库指令;10.194.227.231是数据库的ip地址;postgres是数据库的用户名;postgres是数据库名;>意思是导出到指定目录;4、图文并茂备份二、恢复1、备份命令psql

发表回复

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

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