标签:
每人8张牌,每次抽两张,三个玩家和庄家依次比较,
对子比非对子大,对王最大,依次KQJ 10 9 8```2 A
非对子时,求和,只考虑个位数
分步骤模拟容易不清楚,同时庞杂的变量再次证明可读性多么重要
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define JU 100000
#define QIAN 5000
int main() {
int ju,win=0,sum=0,lose=0;
srand(time(NULL));//以时间为种子
for(ju=1; ju<=JU; ju++) {//局数
int b[54]= {14,14,
1,2,3,4,5,6,7,8,9,10,11,12,13,
1,2,3,4,5,6,7,8,9,10,11,12,13,
1,2,3,4,5,6,7,8,9,10,11,12,13,
1,2,3,4,5,6,7,8,9,10,11,12,13,
};//初始化牌
int player[4][8]= {0}; //初始化玩家
int playering[4][2]= {0}; //初始化玩家要比较的牌
int money[4]= {QIAN,QIAN,QIAN,QIAN}; // 初始化钱
int flag=0,i,j,k,num,m,ci,p1,p2,x,temp,num1,num2;
for(ci=0; flag==0; ci++) {//次数,直至一个玩家输光
for(j=0; j<=53; j++) {//洗牌
x=rand()%54;
temp=b[x];
b[x]=b[j];
b[j]=temp;
}
for(j=0; j<=3; j++) { //发牌
for(k=0; k<=7; k++) {
player[j][k]=b[j*8+k];
}
}
for(j=0; j<=3; j++) { //每次玩牌的内部的轮数
for(k=0; k<=3; k++) { //抽出两张牌放在比较区
playering[k][0]=player[k][8-2*j-1];
playering[k][1]=player[k][8-2*j-2];
}
for(k=1; k<=3; k++) {
if(playering[k][0]==playering[k][2]&&playering[0][0]==playering[0][1]) { //庄家和玩家都是对
if(playering[0][0]>=playering[k][0]) {
money[0]+=10;
money[k]-=10;
} else {
money[0]-=10;
money[k]+=10;
}
} else if(playering[k][0]==playering[k][1]) {
money[0]-=10;
money[k]+=10;
} else if(playering[0][0]==playering[0][1]) {
money[0]+=10;
money[k]-=10;
} else {
if(playering[0][0]>10)//初始化jqk小王大王
playering[0][0]=1;
if(playering[0][1]>10)
playering[0][1]=1;
if(playering[k][0]>10)
playering[k][0]=1;
if(playering[k][1]>10)
playering[k][1]=1;
p1= playering[0][0]+playering[0][1];
if(p1>10)
p1%=10;
p2= playering[k][0]+playering[k][1];
if(p2>10)
p2%=10;
if(p1>p2) {
money[0]+=10;
money[k]-=10;
} else {
money[0]-=10;
money[k]+=10;
}
}
}
}
for(j=0; j<=3; j++) { //判断是否钱为零
if(money[j]<=0) {
flag=1;
}
}
}
// printf("第%d局,庄家:%d,玩家1:%d,玩家2:%d,玩家3:%d\n",ju,money[0],money[1],money[2],money[3]);
if(money[0]>QIAN)
win++;
if(money[0]<=0)
lose++;
sum+=money[0];
}
printf("%d\n",win);
printf("%d\n",lose);
printf("%d",sum/JU);
}
标签:
原文地址:http://www.cnblogs.com/lhy1024/p/5205753.html