资源描述:
《数据结构__扑克牌发牌问题[1]》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、数据结构上机作业内容:问题重述:设计一个四个人玩的纸牌游戏的程序,一共有五十四张牌,要发给四个人,并且每次发出的牌都不一样。并且符合纸牌的规则(可以是桥牌、升级、红四、斗地主等,但是必须说明规则)。并且程序能按照设定的游戏规则从小到大进行排序,如果有底牌的话要说明底牌的情况。最后要验证每次发牌是否合法。该程序纸牌的玩法:在一副牌中,去除大小王,然后2最大其次是A,然后按顺序从大到小一次减小。所用到的具体算法:冒泡法,线性表删除元素操作;具体做法为:先将一副扑克牌中的大小王拿掉,还会剩下52张牌,在进行随机的洗牌,将所有的排顺序打乱,然后在打乱后一定的顺序情况下,按照规则平均分发给四个人,每人
2、会得到十三张牌,最后将每人手里的牌按照3、4、5、6、7、8、9、10、J、Q、K、A、2的顺序进行排列,在排列过程中会出现花色的前后顺序排列。再将四个人手里的拍验证,检验是否每张牌是否都出现并且只出现一次。如果出现并且只出现一次,说明程序成功,否则程序失败,则需要重新进行程序的检验,修改。流程图大致情况:-8-数据结构上机作业设计的结构体变量说明:charCardColor是存储花色的变量charCardNumber[2]是存储扑克牌的面值变量intflag;//判断标志structpukepaiCard[52]用char类型存储52张扑克牌intcard[52]用int类型形式-8-数据
3、结构上机作业并且,我们在一开始定义每张牌的变量每张牌现在我们给予赋值,例如108代表方块8,212代表红桃Q,其中三位数中第一为代表花色:1代表方块,2代表红桃,3代表梅花,4代表黑桃。01代表A,02代表2,依次类推,11代表J,12代表Q,13代表K。具体的函数说明均在程序中标注,不再重复说明。程序执行结果为:1.2.3.结论:通过以上多次程序运行,满足了多次结果不相同,并保证每次都会有所有的排出现且仅出现一次。遇到的问题:对一些代码的含义不太清楚,用起来不太熟练。解决方法是,通过学习书上的知识,了解代码含义,多训练慢慢熟练。附录运行程序为:-8-数据结构上机作业#include4、io.h>#include#include#include//**********************************************************//这是一个模仿五十K的发牌游戏//定义一个结构体,然后定义一个该结构体的数组Card[52](大写的),存储扑克牌(这个存储的是字符串)//定义一个int类型的card[52](小写的),来表示扑克牌,比如105,1代表花色(方块),05代表面值5//再比如313,就是梅花K,401就是黑桃A(ASCII表中3,4,5,6分别表示红桃,方块,梅花,黑桃。将他们
5、减去2就代表百位的数值)//再说一下排序,就是设置一个标志位,标识牌的面值的大小3->0,4->1,5->2,......,J->8,Q->9,K->10,A->11,2->12//然后就是card[52]排序,再转换一下到结构体数组Card[52]就行了.//**********************************************************//定义结构体,存储扑克牌structpukepai{charCardColor;//存储花色charCardNumber[2];//存储扑克牌的面值intflag;//判断标志,如果按照card[52]排序,那么牌由小
6、到大就是:A,2,3,4,5,6,7,8,9,10,J,Q,K//而我们需要由小到大排序是:3,4,5,6,7,8,9,10,J,Q,K,A,2};structpukepaiCard[52];//用char类型存储52张扑克牌intcard[52];//用int类型形式//*************************************************//洗牌函数:将牌打乱voidxipai(){inti,j,k,temp;srand(time(0));for(i=0;i<4;i++)for(j=0;j<13;j++)card[i*13+j]=(i+1)*100+j+1;/
7、/printf("howmanytimesforcard:");//scanf("%d",&count);//for(j=1;j<=count;j++)//洗牌for(i=0;i<52;i++)-8-数据结构上机作业{k=rand()%(51-i+1)+i;temp=card[i];card[i]=card[k];card[k]=temp;}printf("");}//******************