# 问题求解模拟发牌2 原

zengxiangwei

``````
/***********************************************************************

2. 随机发牌：去掉大小王，发给4个人，每人发13张，要求分四行，并按花色

*************************************************************************/``````

``````/*******************************************************************************

*******************************************************************************/

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

struct card {

char suit;//花色

char face;//面值

};//牌的结构体

typedef struct card Card;//结构体重命名

//将面值及花色转换为相应的数值便于排序

int facetonum(char  a)

{

//花色的转换

if(a == '\006') return 23;//黑桃

if(a == '\003') return 22;//红桃

if(a == '\004') return 21;//方块

if(a == '\005') return 20;//梅花

//面值的转换

if(a == 'A')  return 14;

if(a == 'T')  return 10;

if(a == 'J')  return 11;

if(a == 'Q')  return 12;

if(a == 'K')  return 13;

return a - '0';

}

//比较牌大小的函数

int compare(const void *elem1,const void *elem2)

{

Card * elem1t = (Card*) elem1;

Card * elem2t = (Card*) elem2;

//先从花色判断大小

if(facetonum(elem1t->suit) > facetonum(elem2t->suit)) return  -1;

if(facetonum(elem1t->suit) < facetonum(elem2t->suit) ) return 1;

//花色相同由面值决定大小

return  facetonum(elem1t->face) > facetonum(elem2t->face) ?  -1:1;

}

//填充面值及花色

void fillDeck(Card *wDeck, char wFace[], char wSuit[])

{

int i;

for (i=0; i<52; i++)

{        wDeck[i].face = wFace[i%13];//面值13张轮换一次

wDeck[i].suit = wSuit[i/13];//每种花色是13张

}

}

//洗牌

void shuffle(Card *wDeck)

{        int i, j;

Card temp;//用于交换的中间牌

srand(time(NULL));

for (i=0; i<52; i++)

{        j = rand()%52;//产生0 - 51的随机数

//将当前牌与j位置的牌交换

temp.suit = wDeck[i].suit;

temp.face = wDeck[i].face;

wDeck[i].suit = wDeck[j].suit;

wDeck[i].face = wDeck[j].face;

wDeck[j].suit = temp.suit;

wDeck[j].face = temp.face;

}

}

//发牌

void deal (Card *wDeck)

{        int i;

printf("\n\n");

for (i=0; i<52; i++)

printf("%c%c%c", wDeck[i].suit, wDeck[i].face,

(i+1)%13==0 ? '\n' : ' ');//13牌为一组

}

int  main()

{

Card deck[52];

//面值数组

char face[] = {'A', 'K', 'Q', 'J', 'T', '9', '8', '7', '6', '5', '4', '3', '2'};

//花色数组

char suit[] = {'\006', '\003', '\004', '\005'};

fillDeck(deck, face, suit);

shuffle(deck);

//对每一手牌进行排序

qsort(deck,13,sizeof(deck[0]),compare);

qsort(deck+13,13,sizeof(deck[0]),compare);

qsort(deck+26,13,sizeof(deck[0]),compare);

qsort(deck+39,13,sizeof(deck[0]),compare);

deal(deck);

return 0;

}``````

### zengxiangwei

day18-----------集合框架(map集合)（传智视频）

Map集合的获取功能测试 package cn.itcast_01; import java.util.HashMap;import java.util.Map; /* * 作为学生来说，是根据学号来区分不同的学生的，那么假设我现在已经知道了学生的学号，我...

2016/02/16
122
0

Hxuejie
2013/11/13
188
0
h5牛牛源码出售你的斗地主能拿多少炸？

sinat_41780517
03/02
0
0

2016/08/26
110
0

05/03
0
0

H5房卡棋牌
01/02
0
0

2012/11/14
2.2K
5

Ldpe2G
2016/05/19
530
1
ubuntu中无法创建和调试安卓应用的问题

2016/09/18
110
1

2016/06/14
75
0

Ecstore 在没有后台管理界面（维护）的情况如何更新表的字段

window 系统： 切换到：app\base 目录下： C:\Users\qimh>d: D:\>cd D:\WWW\huaqh\app\base 执行：D:\WWW\huaqh\app\base>cmd update linux 系统： 1># cd /alidata/www.novoeshop.com/app/......

qimh
7分钟前
0
0

10分钟前
0
0
python使用有序字典

python自带的collections包中有很多有用的数据结构可供使用，其中有个叫OrderedDict类，它可以在使用的时候记录元素插入顺序，在遍历使用的时候就可以按照原顺序遍历。 a = {"a":1,"b"...

40分钟前
0
0
RestTemplate HttpMessageConverter

RestTemplate 微信接口 text/plain HttpMessageConverter

40分钟前
0
0
mysql视图/存储过程/函数/事件/触发器

--语法参考：https://dev.mysql.com/doc/ （当前用的是5.6） https://dev.mysql.com/doc/refman/5.6/en/sql-syntax-data-manipulation.html --视图 CREATE VIEW test.v AS SELECT * FROM t;......

42分钟前
0
0
MySQL参数优化案例

51分钟前
0
0
【HAVENT原创】NodeJS 短网址开发(调用第三方接口)

HAVENT
52分钟前
0
0
219. Contains Duplicate II - LeetCode

Question 219. Contains Duplicate II Solution 题目大意：数组中两个相同元素的坐标之差小于给定的k，返回true，否则返回false 思路：用一个map记录每个数的坐标，如果数相同，如果坐标差小...

yysue

0
0
Android 自动生成java bean

Carlyle_Lee

0
0

littleFaye

0
0