C算法编程题(一)扑克牌发牌
题目要求
程序描述:
一副纸牌有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数组的下标。
实现效果:
全部程序代码:
当然这只是实现的一种方法,可能园友有更好的实现方法,欢迎指点。。。
本文转自田园里的蟋蟀博客园博客,原文链接:http://www.cnblogs.com/xishuai/p/3392981.html,如需转载请自行联系原作者
C算法编程题(一)扑克牌发牌相关推荐
- C算法编程题(二)正螺旋
前言 上一篇<C算法编程题(一)扑克牌发牌> 写东西前总是喜欢吐槽一些东西,还是多啰嗦几句吧,早上看了一篇博文<谈谈外企涨工资那些事>,里面楼主讲到外企公司包含的五类人,其实不 ...
- C算法编程题(四)上三角
前言 上一篇<C算法编程题(三)画表格> 上几篇说的都是根据要求输出一些字符.图案等,今天就再说一个"上三角",有点类似于第二篇说的正螺旋,输出的字符少了,但是逻辑稍微 ...
- 【面试锦囊】14种模式搞定面试算法编程题(1-7)
面试锦囊之知识整理系列 面试锦囊系列一直有收到大家的反馈,包括后台内推成功的消息.朋友的同事从创业小公司成功跳到huawei等等,非常高兴小破号的这些整理分享能够真正地帮助到大家,以后也会继续.为了更 ...
- 【面试锦囊】14种模式搞定面试算法编程题(8-14)
面试锦囊之知识整理系列 面试锦囊系列一直有收到大家的反馈,包括后台内推成功的消息.朋友的同事从创业小公司成功跳到huawei等等,非常高兴小破号的这些整理分享能够真正地帮助到大家,以后也会继续.为了更 ...
- C算法编程题(七)购物
前言 上一篇<C算法编程题(六)串的处理> 有些朋友看过我写的这个算法编程题系列,都说你写的不是什么算法,也不是什么C++,大家也给我提出用一些C++特性去实现问题更方便些,在这里谢谢大家 ...
- system verilog编程题_拼多多2020校招部分算法编程题合集
拼多多2020校招部分算法编程题2道,多多的魔术盒子和多多的排列函数 其实根据他的匹配职位我们可以看到,这5道题的难度还是并不高,只是作为一个初步筛选,我这边选择了前两道跟大家分享 [编程题一] 多多 ...
- 14种模式解决面试算法编程题(PART I)
万万没想到,暑假还没开始,有些公司的秋招提前批已经来了-很慌-数据结构和算法题可以说是秋招笔试面试必考的内容,如果你还不够熟练(just like me),那就要从现在开始疯狂刷题了啊朋友们. 附上我 ...
- 算法编程题的心得体会
如果是在线笔试,一定要注意问题的规模, 这牵涉到算法时间复杂度的要求 也涉及相关数据结构的设计 比如,一道关于郊游的题目,学生的规模最大才到 10 人: 再考察学生之间的关系时,显然可以使用二维数组b ...
- 14种模式解决面试算法编程题(PART II)
继续 8.树的宽度优先搜索(Tree BFS) 该模式基于广度优先搜索(BFS)技术来遍历树,并使用队列在跳到下一层之前记录下该层的所有节点.使用这种方法可以有效地解决涉及以逐级顺序遍历树的任何问题. ...
最新文章
- Pytorch的安装教程
- Django后台定制
- 【leetcode】 算法题1 两数之和
- gc的原因 频繁full_系统缓慢+CPU 100%+频繁Full GC问题的定位排查思路!
- web安全_暴力破解
- 他不怕被拒绝_【保险知识】高情商保险营销,再也不怕被拒绝!
- Collections.sort的使用
- PostgreSQL查看版本信息
- 仍有很多企业并未修复微软 Hyber-V 的严重漏洞
- 一个适用于visual studio 2005的一个js日历控件--zhuan
- php sspi应用,SPI串行通信模块应用(一)
- linux新建虚拟机到图形化界面
- Jenkins管理静态资源
- JavaScript 大小转化B KB MB GB等的转化
- duet设置_Duet Display 使用体验 - iPad 变身扩展屏幕
- 直播功能引入微信小程序
- python爬LOL英雄皮肤
- python Beautifulsoup4爬取凡人修仙传仙界篇连载中文章并生成txt
- 思维拓展:用java实现巧妙过桥问题
- 计算机主机内的零件有什么用,ROM和RAM分别是什么?有什么区别?与电脑的什么配件的作用是一? 爱问知识人...
热门文章
- error C1189: #error : WINDOWS.H already included. MFC apps must not #include windows.h
- oracle 触发器 和 常用内置程序包
- python计时器timeit返回秒数_python中的计时器timeit的使用方法
- vector拷贝复制方法
- html自定义工具条,为Autodesk Viewer添加自定义工具条的更好方法
- jar包导出无法显示图片或者音乐_音乐曲谱软件-Guitar Pro 7 for Mac
- flask项目从本地迁移到服务器上遇到net::ERR_CONNECTION_R问题
- 光流 | 光流算法对比:Farneback、Horn-Schunck、Lucas-Kanade、Lucas-Kanade derivative of Gaussian(附Matlab与C++代码)
- win32程序启用控制台-- 调试输出
- MFC之ComboBox控件用法