求高手帮忙写一个c语言发牌程序
这是一个洗牌程序
#include
#include
#include
#include
#define N 52
int main(void)
{
int poker[N + 1];
int i, j, tmp, remain;
/* 初始化阵列 */
for (i = 1; i <= N; i++)
{
poker[i] = i;
printf("%d ", poker[i]);
}
printf("
");
srand(time(0));
/* 洗牌 */
for (i = 1; i <= N; i++)
{
j = rand() % N + 1;
tmp = poker[i];
poker[i] = poker[j];
poker[j] = tmp;
}
for (i = 1; i <= N; i++)
{
printf("%d ", poker[i]);
}
/* 判断花色 */
for (i = 1; i <= N; i++)
{
switch((poker[i] - 1) / 13)
{
case 0:
printf("桃"); break;
case 1:
printf("心"); break;
case 2:
printf("砖"); break;
case 3:
printf("梅"); break;
}
/* 数字 */
remain = poker[i] % 13;
switch(remain)
{
case 0:
printf("K "); break;
case 12:
printf("Q "); break;
case 11:
printf("J "); break;
default:
printf("%d ", remain); break;
}
if (i % 13 == 0)
printf("
");
}
return 0;
}
你应该分开提问,没人会一下为你做这么多题
#include <time.h>#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define PLAYER 4//玩家人数
#define NUM 13//玩家拿牌数
#define SIZE 52//所有牌数
//声明函数
void PokerRand(int *pokerRand);
void Palyer(int *pokerRand);
void Process(int *countA, int *countB, int *countC, int *countD);
void Output(int *poker, int *countA, int *countB, int *countC, int *countD);
struct PokerGame
{
int A[NUM];//记录玩家手中的黑桃牌
int B[NUM];//记录玩家手中的红桃牌
int C[NUM];//记录玩家手中的梅花牌
int D[NUM];//记录玩家手中的方片牌
int manNum[NUM];//记录玩家手里所有的牌
}man[PLAYER];
//随机产生52张牌
void PokerRand(int *pokerRand)
{
int i, j;
srand((unsigned)time(NULL));
for (i=0; i<SIZE; i++)
{
MARK: pokerRand[i] = rand()%52;
for (j=0; j<i; j++)
{
if (pokerRand[i] == pokerRand[j])
{
goto MARK;
}
}
}
}
//给4个玩家发牌
void Palyer(int *pokerRand)
{
int i, j;
int count = 0;
for (j=0; j<NUM; j++)
{
for (i=0; i<PLAYER; i++)//轮流发牌
{
man[i].manNum[j] = pokerRand[count++];
}
}
}
//统计玩家手中的牌
void Process(int *countA, int *countB, int *countC, int *countD)
{
int i, j;
for (i=0; i<PLAYER; i++)
{
countA[i] = 0;
countB[i] = 0;
countC[i] = 0;
countD[i] = 0;
for (j=0; j<NUM; j++)//统计四个玩家手中的牌
{
if ((man[i].manNum[j] >= 0) && (man[i].manNum[j] < 13))//黑桃
{
man[i].A[ countA[i]++ ] = man[i].manNum[j];
}
else if (man[i].manNum[j] < 26)//红桃
{
man[i].B[ countB[i]++ ] = man[i].manNum[j];
}
else if (man[i].manNum[j] < 39)//梅花
{
man[i].C[ countC[i]++ ] = man[i].manNum[j];
}
else//方片
{
man[i].D[ countD[i]++ ] = man[i].manNum[j];
}
}
}
}
//输出
void Output(int *poker, int *countA, int *countB, int *countC, int *countD)
{
int i, j;
printf("扑克牌自动发牌 %c(黑) %c(红) %c(梅) %c(方):\n", 6, 3, 5, 4);
for (i=0; i<PLAYER; i++)
{
printf("\n第%d人 :\n", i+1);//开始输出第i个玩家
printf("%c:\t", 6);//输出第i个玩家的黑桃牌
for (j=0; j<countA[i]; j++)
{
if (poker[ man[i].A[j] ] == 10)//假如等于10,以%d格式输出
{
printf("%4d", poker[ man[i].A[j] ]);
}
else//否则以%c格式输出
{
printf("%4c", poker[ man[i].A[j] ]);
}
}
printf("\n");
printf("%c:\t", 3);//输出第i个玩家的红桃牌
for (j=0; j<countB[i]; j++)
{
if (poker[ man[i].B[j] ] == 10)
{
printf("%4d", poker[ man[i].B[j] ]);
}
else
{
printf("%4c", poker[ man[i].B[j] ]);
}
}
printf("\n");
printf("%c:\t", 5);//输出第i个玩家的梅花牌
for (j=0; j<countC[i]; j++)
{
if (poker[ man[i].C[j] ] == 10)
{
printf("%4d", poker[ man[i].C[j] ]);
}
else
{
printf("%4c", poker[ man[i].C[j] ]);
}
}
printf("\n");
printf("%c:\t", 4);//输出第i个玩家的方片牌
for (j=0; j<countD[i]; j++)
{
if (poker[ man[i].D[j] ] == 10)
{
printf("%4d", poker[ man[i].D[j] ]);
}
else
{
printf("%4c", poker[ man[i].D[j] ]);
}
}
printf("\n");
}
}
void main(void)
{
int countA[PLAYER] = { 0 };//记录4个玩家持黑桃牌数
int countB[PLAYER] = { 0 };//记录4个玩家持红桃牌数
int countC[PLAYER] = { 0 };//记录4个玩家持梅花牌数
int countD[PLAYER] = { 0 };//记录4个玩家持方片牌数
int pokerRand[SIZE] = { 0 };//存放随机产生52张牌
int poker[SIZE] = {65, 50, 51, 52, 53, 54, 55, 56, 57, 10, 74, 81, 75,
65, 50, 51, 52, 53, 54, 55, 56, 57, 10, 74, 81, 75,
65, 50, 51, 52, 53, 54, 55, 56, 57, 10, 74, 81, 75,
65, 50, 51, 52, 53, 54, 55, 56, 57, 10, 74, 81, 75,};
PokerRand(pokerRand);//洗牌
Palyer(pokerRand);//发牌
Process(countA, countB, countC, countD);//整牌
Output(poker, countA, countB, countC, countD);//亮牌
printf("\n\n\n");
system("pause");
}
自动发牌
一副扑克有52张牌,打桥牌时应将牌分给四个人。请设计一个程序完成自动发牌的工作。要求:黑桃用S(Spaces)表示;红桃用H(Hearts)表示;方块用D(Diamonds)表示;梅花用C(Clubs)表示。
*问题分析与算法设计
按照打桥牌的规定,每人应当有13张牌。在人工发牌时,先进行洗牌,然后将洗好的牌按一定的顺序发给每一个人。为了便于计算机模拟,可将人工方式的发牌过程加以修改:先确定好发牌顺序:1、2、3、4;将52张牌顺序编号:黑桃2对应数字0,红桃2对应数字1,方块2对应数字2,梅花2对应数字3,黑桃3对应数字4,红桃3对应数字5,...然后从52 张牌中随机的为每个人抽牌。
这里采用C语言库函数的随机函数,生成0到51之间的共52个随机数,以产生洗牌后发牌的效果。
*程序与程序注释
#include<stdlib.h>
#include<stdio.h>
int comp(const void *j,const void *i);
void p(int b[],char n[]);
void main()
{
static char n[]={\'2\',\'3\',\'4\',\'5\',\'6\',\'7\',\'8\',\'9\',\'T\',\'J\',\'Q\',\'K\',\'A\'};
int a[53],b1[13],b2[13],b3[13],b4[13];
int b11=0,b22=0,b33=0,b44=0,t=1,m,flag,i;
while(t<=52) /*控制发52张牌*/
{ m=random(52); /*产生0到51之间的随机数*/
for(flag=1,i=1;i<=t&&flag;i++) /*查找新产生的随机数是否已经存在*/
if(m==a) flag=0; /*flag=1:产生的是新的随机数
flag=0:新产生的随机数已经存在*/
if(flag)
{
a[t++]=m; /*如果产生了新的随机数,则存入数组*/
if(t%4==0) b1[b11++]=a[t-1]; /*根据t的模值,判断当前*/
else if(t%4==1) b2[b22++]=a[t-1]; /*的牌应存入哪个数组中*/
else if(t%4==2) b3[b33++]=a[t-1];
else if(t%4==3) b4[b44++]=a[t-1];
}
}
qsort(b1,13,sizeof(int),comp); /*将每个人的牌进行排序*/
qsort(b2,13,sizeof(int),comp);
qsort(b3,13,sizeof(int),comp);
qsort(b4,13,sizeof(int),comp);
p(b1,n); p(b2,n); p(b3,n); p(b4,n); /*分别打印每个人的牌*/
}
void p(int b[],char n[])
{
int i;
printf("\\n\\006 "); /*打印黑桃标记*/
for(i=0;i<13;i++) /*将数组中的值转换为相应的花色*/
if(b/13==0) printf("%c ",n[b%13]); /*该花色对应的牌*/
printf("\\n\\003 "); /*打印红桃标记*/
for(i=0;i<13;i++)
if((b/13)==1) printf("%c ",n[b%13]);
printf("\\n\\004 "); /*打印方块标记*/
for(i=0;i<13;i++)
if(b/13==2) printf("%c ",n[b%13]);
printf("\\n\\005 "); /*打印梅花标记*/
for(i=0;i<13;i++)
if(b/13==3||b/13==4) printf("%c ",n[b%13]);
printf("\\n");
}
int comp(const void *j,const void *i) /*qsort调用的排序函数*/
{
return(*(int*)i-*(int*)j);
}
mark
把要求说一下吧
程序规则???
求高手帮忙写一个c语言发牌程序
void Output(int *poker, int *countA, int *countB, int *countC, int *countD){ int i, j; printf("扑克牌自动发牌 %c(黑) %c(红) %c(梅) %c(方):\\n", 6, 3, 5, 4); for (i=0; i<PLAYER; i++) { printf("\\n第%d人 :\\n", i+1);\/\/开始输出第i个玩家 printf("%c:...
c语言编程用扑克牌洗牌和发牌
程序就不写了,写下大致流程 \/\/定义一个数组,或者列表,链表什么的随你 \/\/共52个元素 记作card[52]\/\/card代表扑克牌的类,有花色(color 枚举,0,1,2,3),点数(枚举 A~K)等属性 card tmp;for(int i=0;i<52;i++){ \/\/计算一个0到52之间的随机数x tmp=card[i];card[i]=...
我有一个洗牌发牌的程序,但不知道哪错了。请高手帮忙看看
1、最后输出时没写循环,只输出了一组数据。2、a[i]%13==13改成a[i]%13==0 3、a[t]=a[r];a[r]=a[i];a[i]=a[t];改成 t=a[r];a[r]=a[i];a[i]=t;4、"%3c","%2c"改成"%3c%2c"5、(i-1)%13+3我没看懂是什么意思。是想显示花色么?我不知道ASCII码表里有没...
...随机产生的牌的点数决定双方的输赢。求高手帮忙 跪求 万分感谢_百度...
}while(1);return 0;}
求高手帮忙制作C语言程序:输出九九乘法口决表(循环结构的应用,表的格...
include<stdio.h> void main(){ int i,j,result;printf("\\n");for (i=1;i<10;i++){for(j=1;j<=i;j++) { result=i*j; printf("%d*%d=%-3d",i,j,result);\/*-3d表示左对齐,占3位*\/ } printf("\\n");} }
急求一道C语言随机抽取幸运观众的完整程序
\/*C语言随机抽取幸运观众的完整程序*\/ include <stdio.h> include include <stdlib.h> define MAX_COUNT 100 void main(){ int option = 0;srand((unsigned)time(NULL));while(1){ printf("***\\n");printf("1 产生幸运观众\\n2 退出\\n");printf("请输入选项(1~2): ");scanf("%d"...
跪求C语言编程高手帮忙编个小程序,大一年级的
printf("字符串中共有:%d字符\\n大写字母:%d个\\n小写字母:%d个\\n数字:%d个\\n空格:%d个\\n其他字符:%d\\n",tot,a,b,c,d,e);for(i=0;i<tot-1;i++){ iPos = i;for(j=i+1;j<tot;j++)if(ch[j]<ch[iPos])iPos=j;iTemp = ch[i];ch[i] = ch[iPos];ch[iPos]=iTemp...
急求一个c语言程序后天就要用了麻烦各位好心高手帮帮忙。谢谢。_百度...
xian_shi() \/\/显示程序 { uchar bai,shi,ge,xiaoshu;unsigned long int k=14,h=36;unsigned long int jj;jj=mm*k*h;bai=jj\/1000000;shi=jj%1000000\/100000;ge=jj%100000\/10000;xiaoshu=jj%10000\/1000;P2=0xE0;P0=table[bai];delay(1);P2=0XF0;P2=0xD0;P0=table[shi];delay(1)...
C语言高手帮忙解决,急~~~(编程),要全部过程喔,题目如补充所示
int main(){ int i,j,D=0,d=0,s=0,q=0;char a;while(scanf("%c",&a) && a!='!'){ if(a>='A' && a<='Z') ++D;else if(a>='a' && a<='z') ++d;else if(a>='0' && a<='9') ++s;else ++q;} printf("大写字母:%d\\n小写字母:%d\\n数字:%d\\n其他...
c语言高手帮帮忙!
include <stdio.h>#define N 10int main(){ char names[4][3]={"张","王","李","赵"}; int i,t,n=N,cnt[4]={0},f=0,z=0,max=0; printf("当前共%d个投票人 ,请投张:1 王:2 李:3 赵:4 (输入-1结束投票)\\n",N); while(n--) { scanf("%d",...