题目要求

  程序描述:

  一副纸牌有52张,4种花色,每种花色13张。我们能用一个整数m就表示出所有的52种情况,规则是:

  m / 13: =0: 红心,=1: 方块,=2: 梅花,=3: 黑桃

  m % 13:  =0:2,=1:3,=2:4 ....  =8:10,=9:J,=10:Q,=11: K,=12:A

  比如:m = 15 就表示:方块4  m=38表示:梅花A

  我们希望用程序模拟1副扑克牌随机抽取13张,发给某人的过程。

  发牌后需要排序:规则是:先按花色,再按点数。花色的大小顺序是:梅花、方块、红心、黑桃。点数的顺序是:2、3、4、…. 10、J、Q、K、A。

  然后,挑选出最大的连续牌型。规则是:连续张数多的大。张数相等的则花色大的大(此时与点数无关)。

程序实现

  我们先分析下,上面的题目要求描述的很清楚了,我们要实现三个步骤:1,发牌(随机)2,排序 3,输出最大的连续牌型。

  1,发牌

  这个比较简单,我直接贴下代码:

 1     int m,k=0,i,j,l,t,x,y;
 2     int puKe[4][13]={0};
 3     int w[4]={0};
 4     char point[13]={'2','3','4','5','6','7','8','9','0','J','Q','K','A'};
 5     srand(time(NULL));
 6     while(k<13)
 7     {
 8         m=rand()%52;
 9         x=m/13;
10         y=m%13;
11         if(puKe[x][y]==1)
12         {
13             continue;
14         }
15         puKe[x][y]=1;
16         printf("%c",x+3);
17         if(y==8)
18         {
19             printf("1");
20         }
21         printf("%c ",point[y]);
22         k++;
23     }

  这里我们用point数组存储点数,puKe数组的下标分别存储花色和点数,值为1表示这张牌已经发了,x+3是花色的转义字符。

  2,排序

  其实这个也好实现,因为我们存储的发牌在puKe数组中,排序规则是先按花色,再按点数,这里我们用笨方法,用四个for循环就可以实现,分别遍历puKe数组。

  示例代码:

 1     for(j=0;j<13;j++)
 2     {
 3         if(puKe[2][j]==1)
 4         {
 5             printf("%c",5);
 6             if(j==8)
 7             {
 8                 printf("1");
 9             }
10             printf("%c ",point[j]);
11         }
12     }
13     for(j=0;j<13;j++)
14     {
15         if(puKe[1][j]==1)
16         {
17             printf("%c",4);
18             if(j==8)
19             {
20                 printf("1");
21             }
22             printf("%c ",point[j]);
23         }
24     }
25     for(j=0;j<13;j++)
26     {
27         if(puKe[0][j]==1)
28         {
29             printf("%c",3);
30             if(j==8)
31             {
32                 printf("1");
33             }
34             printf("%c ",point[j]);
35         }
36     }
37     for(j=0;j<13;j++)
38     {
39         if(puKe[3][j]==1)
40         {
41             printf("%c",6);
42             if(j==8)
43             {
44                 printf("1");
45             }
46             printf("%c ",point[j]);
47         }
48     }

  3,输出最大的连续牌型

  示例代码:

 1     int count[4]={0};
 2     int index[4]={0};
 3     int temp=0;
 4     for(i=0;i<4;i++)
 5     {
 6         for(j=0;j<13;j++)
 7         {
 8             if(j!=0)
 9             {
10                 if(puKe[i][j]==1 && puKe[i][j-1]==1)
11                 {
12                     temp++;
13                 }
14                 else
15                 {
16                     if(count[i]<temp)
17                     {
18                         count[i]=temp;
19                         index[i]=j;
20                     }
21                     temp=0;
22                 }
23             }
24         }
25         count[i]++;
26     }
27
28     int max=0;        29     if(count[3]>max)
30     {
31         max=count[3];
32         temp=3;
33     }
34     for(i=0;i<3;i++)
35     {
36         if(count[i]>max)
37         {
38             max=count[i];
39             temp=i;
40         }
41     }
42
43     int a=index[temp]-max;
44     for(i=0;i<max;i++)
45     {
46         printf("%c",temp+3);
47         if(a==8)
48         {
49             printf("1");
50         }
51         printf("%c ",point[a]);
52
53         a++;
54     }

  count数组的意思是各个花色牌连续最大数,index数组存储的是开始各个花色连续的开始点数,就是point数组的下标。

  实现效果:

  全部程序代码:

 View Code

  当然这只是实现的一种方法,可能园友有更好的实现方法,欢迎指点。。。

本文转自田园里的蟋蟀博客园博客,原文链接:http://www.cnblogs.com/xishuai/p/3392981.html,如需转载请自行联系原作者

C算法编程题(一)扑克牌发牌相关推荐

  1. C算法编程题(二)正螺旋

    前言 上一篇<C算法编程题(一)扑克牌发牌> 写东西前总是喜欢吐槽一些东西,还是多啰嗦几句吧,早上看了一篇博文<谈谈外企涨工资那些事>,里面楼主讲到外企公司包含的五类人,其实不 ...

  2. C算法编程题(四)上三角

    前言 上一篇<C算法编程题(三)画表格> 上几篇说的都是根据要求输出一些字符.图案等,今天就再说一个"上三角",有点类似于第二篇说的正螺旋,输出的字符少了,但是逻辑稍微 ...

  3. 【面试锦囊】14种模式搞定面试算法编程题(1-7)

    面试锦囊之知识整理系列 面试锦囊系列一直有收到大家的反馈,包括后台内推成功的消息.朋友的同事从创业小公司成功跳到huawei等等,非常高兴小破号的这些整理分享能够真正地帮助到大家,以后也会继续.为了更 ...

  4. 【面试锦囊】14种模式搞定面试算法编程题(8-14)

    面试锦囊之知识整理系列 面试锦囊系列一直有收到大家的反馈,包括后台内推成功的消息.朋友的同事从创业小公司成功跳到huawei等等,非常高兴小破号的这些整理分享能够真正地帮助到大家,以后也会继续.为了更 ...

  5. C算法编程题(七)购物

    前言 上一篇<C算法编程题(六)串的处理> 有些朋友看过我写的这个算法编程题系列,都说你写的不是什么算法,也不是什么C++,大家也给我提出用一些C++特性去实现问题更方便些,在这里谢谢大家 ...

  6. system verilog编程题_拼多多2020校招部分算法编程题合集

    拼多多2020校招部分算法编程题2道,多多的魔术盒子和多多的排列函数 其实根据他的匹配职位我们可以看到,这5道题的难度还是并不高,只是作为一个初步筛选,我这边选择了前两道跟大家分享 [编程题一] 多多 ...

  7. 14种模式解决面试算法编程题(PART I)

    万万没想到,暑假还没开始,有些公司的秋招提前批已经来了-很慌-数据结构和算法题可以说是秋招笔试面试必考的内容,如果你还不够熟练(just like me),那就要从现在开始疯狂刷题了啊朋友们. 附上我 ...

  8. 算法编程题的心得体会

    如果是在线笔试,一定要注意问题的规模, 这牵涉到算法时间复杂度的要求 也涉及相关数据结构的设计 比如,一道关于郊游的题目,学生的规模最大才到 10 人: 再考察学生之间的关系时,显然可以使用二维数组b ...

  9. 14种模式解决面试算法编程题(PART II)

    继续 8.树的宽度优先搜索(Tree BFS) 该模式基于广度优先搜索(BFS)技术来遍历树,并使用队列在跳到下一层之前记录下该层的所有节点.使用这种方法可以有效地解决涉及以逐级顺序遍历树的任何问题. ...

最新文章

  1. Pytorch的安装教程
  2. Django后台定制
  3. 【leetcode】 算法题1 两数之和
  4. gc的原因 频繁full_系统缓慢+CPU 100%+频繁Full GC问题的定位排查思路!
  5. web安全_暴力破解
  6. 他不怕被拒绝_【保险知识】高情商保险营销,再也不怕被拒绝!
  7. Collections.sort的使用
  8. PostgreSQL查看版本信息
  9. 仍有很多企业并未修复微软 Hyber-V 的严重漏洞
  10. 一个适用于visual studio 2005的一个js日历控件--zhuan
  11. php sspi应用,SPI串行通信模块应用(一)
  12. linux新建虚拟机到图形化界面
  13. Jenkins管理静态资源
  14. JavaScript 大小转化B KB MB GB等的转化
  15. duet设置_Duet Display 使用体验 - iPad 变身扩展屏幕
  16. 直播功能引入微信小程序
  17. python爬LOL英雄皮肤
  18. python Beautifulsoup4爬取凡人修仙传仙界篇连载中文章并生成txt
  19. 思维拓展:用java实现巧妙过桥问题
  20. 计算机主机内的零件有什么用,ROM和RAM分别是什么?有什么区别?与电脑的什么配件的作用是一? 爱问知识人...

热门文章

  1. error C1189: #error : WINDOWS.H already included. MFC apps must not #include windows.h
  2. oracle 触发器 和 常用内置程序包
  3. python计时器timeit返回秒数_python中的计时器timeit的使用方法
  4. vector拷贝复制方法
  5. html自定义工具条,为Autodesk Viewer添加自定义工具条的更好方法
  6. jar包导出无法显示图片或者音乐_音乐曲谱软件-Guitar Pro 7 for Mac
  7. flask项目从本地迁移到服务器上遇到net::ERR_CONNECTION_R问题
  8. 光流 | 光流算法对比:Farneback、Horn-Schunck、Lucas-Kanade、Lucas-Kanade derivative of Gaussian(附Matlab与C++代码)
  9. win32程序启用控制台-- 调试输出
  10. MFC之ComboBox控件用法