c语言编程问题。。。这是一个作业。。实在不会写,求大神帮忙。。。
背景:两个人每人发3张牌(各从一副牌中),每张牌包括花色(红桃(Heart)>黑桃(Spade)>方块(Diamond)>梅花(Club))和大小(从小到大依次是:2-1...
背景:两个人每人发3张牌(各从一副牌中),每张牌包括花色(红桃(Heart)>黑桃(Spade)>方块(Diamond)>梅花(Club))和大小(从小到大依次是:2-10、J、Q、K、A),胜负规则如下:同花顺(3张同花色的连牌,先比大小,再比花色,后同)>炸弹(3张相同大小的牌)>连牌(3张不同花色的连牌)>对子(两张相同大小的牌)>单牌。例如,红桃QKA>黑桃QKA>梅花567>方块234>AAA(红桃、方块、梅花)>AAA(黑桃、方块、梅花)>JQK(红桃、红桃、方块)>JQK(黑桃、红桃、方块)>AA2(梅花黑桃梅花)>QQJ(红桃梅花方块)>JQA(红桃红桃红桃)。
注:A23不算连牌。
输入:A的3张牌(未排序)和B的3张牌(未排序)。(参见用例
)输出:A的3张牌的排序后的输出和B的3张牌的排序后的输出,以及A和B谁获胜。
大神们编出来请发我邮箱495241387@qq.com
求大神啊,60分都没有人么。。 展开
注:A23不算连牌。
输入:A的3张牌(未排序)和B的3张牌(未排序)。(参见用例
)输出:A的3张牌的排序后的输出和B的3张牌的排序后的输出,以及A和B谁获胜。
大神们编出来请发我邮箱495241387@qq.com
求大神啊,60分都没有人么。。 展开
3个回答
展开全部
#include<stdio.h>
struct Poker
{
char num;
char color;
};
int comparenum(char a,char b)
{
a=(a=='A'?'9'+5:a);
b=(b=='A'?'9'+5:b);
a=(a=='K'?'9'+4:a);
b=(b=='K'?'9'+4:b);
a=(a=='Q'?'9'+3:a);
b=(b=='Q'?'9'+3:b);
a=(a=='J'?'9'+2:a);
b=(b=='J'?'9'+2:b);
a=(a=='1'?'9'+1:a);
b=(b=='1'?'9'+1:b);
return int(a-b);
}
int comparecolor(char a,char b)
{
switch(a)
{
case 'C':if(b=='D'||b=='S'||b=='H')return -1;
else return 0;
case 'D':if(b=='S'||b=='H')return -1;
else if(b=='C')return 1;
else return 0;
case 'S':if(b=='H')return -1;
else if(b=='C'||b=='D')return 1;
else return 0;
case 'H':if(b=='C'||b=='D'||b=='S')return 1;
else return 0;
default:break;
}
return 0;
}
void sortpoker(Poker p[3])
{
Poker temp;
int i,j;
for(i=0;i<3;i++)
{
for(j=i;j<3;j++)
{
if(comparenum(p[i].num,p[j].num)<0)
{
temp=p[i];
p[i]=p[j];
p[j]=temp;
}
}
}
for(i=0;i<3;i++)
{
for(j=i;j<3;j++)
{
if(comparenum(p[i].num,p[j].num)==0&&comparecolor(p[i].color,p[j].color)<0)
{
temp=p[i];
p[i]=p[j];
p[j]=temp;
}
}
}
}
int isline(Poker p[3])
{
if(comparenum(p[1].num,p[0].num)==-1&&comparenum(p[2].num,p[1].num)==-1)
return 1;
else
return 0;
}
int isflush(Poker p[3])
{
if(comparecolor(p[0].color,p[1].color)==0&&comparecolor(p[1].color,p[2].color)==0\
&&isline(p))
return 1;
else
return 0;
}
int isbomb(Poker p[3])
{
if(comparenum(p[0].num,p[2].num)==0)
return 1;
else
return 0;
}
int isdouble(Poker p[3])
{
if(comparenum(p[0].num,p[1].num)==0||comparenum(p[0].num,p[2].num)==0\
||comparenum(p[1].num,p[2].num)==0)
return 1;
else
return 0;
}
int diffpoker(Poker p[3])
{
if(p[0].num==p[1].num)
return 2;
else
return 0;
}
int comparepoker(Poker p1[3],Poker p2[3])
{
int index1;
int index2;
if(isflush(p1))
{
if(isflush(p2))
{
if(comparenum(p1[0].num,p2[0].num)>0)
return 1;
else if(comparenum(p1[0].num,p2[0].num)<0)
return -1;
else if(comparecolor(p1[0].color,p2[0].color)>0)
return 1;
else if(comparecolor(p1[0].color,p2[0].color)<0)
return -1;
else if(comparecolor(p1[1].color,p2[1].color)>0)
return 1;
else if(comparecolor(p1[1].color,p2[1].color)<0)
return -1;
else if(comparecolor(p1[2].color,p2[2].color)>0)
return 1;
else if(comparecolor(p1[2].color,p2[2].color)<0)
return -1;
else
return 0;
}
else
return 1;
}
else if(isbomb(p1))
{
if(isflush(p2))
return -1;
else if(isbomb(p2))
{
if(comparenum(p1[0].num,p2[0].num)>0)
return 1;
else if(comparenum(p1[0].num,p2[0].num)<0)
return -1;
else if(comparecolor(p1[0].color,p2[0].color)>0)
return 1;
else if(comparecolor(p1[0].color,p2[0].color)<0)
return -1;
else if(comparecolor(p1[1].color,p2[1].color)>0)
return 1;
else if(comparecolor(p1[1].color,p2[1].color)<0)
return -1;
else if(comparecolor(p1[2].color,p2[2].color)>0)
return 1;
else if(comparecolor(p1[2].color,p2[2].color)<0)
return -1;
else
return 0;
}
else
return 1;
}
else if(isline(p1))
{
if(isflush(p2)||isbomb(p2))
return -1;
else if(isline(p2))
{
if(comparenum(p1[0].num,p2[0].num)>0)
return 1;
else if(comparenum(p1[0].num,p2[0].num)<0)
return -1;
else if(comparecolor(p1[0].color,p2[0].color)>0)
return 1;
else if(comparecolor(p1[0].color,p2[0].color)<0)
return -1;
else if(comparecolor(p1[1].color,p2[1].color)>0)
return 1;
else if(comparecolor(p1[1].color,p2[1].color)<0)
return -1;
else if(comparecolor(p1[2].color,p2[2].color)>0)
return 1;
else if(comparecolor(p1[2].color,p2[2].color)<0)
return -1;
else
return 0;
}
else
return 1;
}
else if(isdouble(p1))
{
if(isflush(p2)||isbomb(p2)||isline(p2))
return -1;
else if(isdouble(p2))
{
if(comparenum(p1[1].num,p2[1].num)>0)
return 1;
else if(comparenum(p1[1].num,p2[1].num)<0)
return -1;
else if(comparenum(p1[index1=diffpoker(p1)].num,p2[index2=diffpoker(p2)].num)>0)
return 1;
else if(comparenum(p1[index1].num,p2[index2].num)<0)
return -1;
else if(index1==0)
{
if(comparecolor(p1[1].color,p2[1].color)>0)
return 1;
else if(comparecolor(p1[1].color,p2[1].color)<0)
return -1;
else if(comparecolor(p1[2].color,p2[2].color)>0)
return 1;
else if(comparecolor(p1[2].color,p2[2].color)<0)
return -1;
else if(comparecolor(p1[0].color,p2[0].color)>0)
return 1;
else if(comparecolor(p1[0].color,p2[0].color)<0)
return -1;
else
return 0;
}
else
{
if(comparecolor(p1[0].color,p2[0].color)>0)
return 1;
else if(comparecolor(p1[0].color,p2[0].color)<0)
return -1;
else if(comparecolor(p1[1].color,p2[1].color)>0)
return 1;
else if(comparecolor(p1[1].color,p2[1].color)<0)
return -1;
else if(comparecolor(p1[2].color,p2[2].color)>0)
return 1;
else if(comparecolor(p1[2].color,p2[2].color)<0)
return -1;
else
return 0;
}
}
else
return 1;
}
else if(isflush(p2)||isbomb(p2)||isline(p2)||isdouble(p2))
return -1;
else if(comparenum(p1[0].num,p2[0].num)>0)
return 1;
else if(comparenum(p1[0].num,p2[0].num)<0)
return -1;
else if(comparenum(p1[1].num,p2[1].num)>0)
return 1;
else if(comparenum(p1[1].num,p2[1].num)<0)
return -1;
else if(comparenum(p1[2].num,p2[2].num)>0)
return 1;
else if(comparenum(p1[2].num,p2[2].num)<0)
return -1;
else if(comparecolor(p1[0].color,p2[0].color)>0)
return 1;
else if(comparecolor(p1[0].color,p2[0].color)<0)
return -1;
else if(comparecolor(p1[1].color,p2[1].color)>0)
return 1;
else if(comparecolor(p1[1].color,p2[1].color)<0)
return -1;
else if(comparecolor(p1[2].color,p2[2].color)>0)
return 1;
else if(comparecolor(p1[2].color,p2[2].color)<0)
return -1;
return 0;
}
int testdata(Poker p[3])
{
int i,j;
for(i=0;i<3;i++)
{
if(!(p[i].num=='A'||p[i].num=='J'||p[i].num=='Q'||p[i].num=='K'||\
p[i].num>='2'&&p[i].num<='9'))
return -1;
if(!(p[i].color=='S'||p[i].color=='H'||p[i].color=='D'||p[i].color=='C'))
return -1;
for(j=i+1;j<3;j++)
{
if(p[i].color==p[j].color&&p[i].num==p[j].num)
return -1;
}
}
return 1;
}
int main()
{
Poker Apoker[3];
Poker Bpoker[3];
int i,flag;
char str[5];
printf("1. ");
for(i=0;i<3;i++)
{
scanf("%s",str);
Apoker[i].color=str[0];
Apoker[i].num=str[1];
}
printf("2. ");
for(i=0;i<3;i++)
{
scanf("%s",str);
Bpoker[i].color=str[0];
Bpoker[i].num=str[1];
}
sortpoker(Apoker);
sortpoker(Bpoker);
if(testdata(Apoker)==-1||testdata(Bpoker)==-1)
{
printf("Input Error!\n");
return 1;
}
flag=comparepoker(Apoker,Bpoker);
if(flag==1)
printf("1. Winner is A!\n");
else if(flag==-1)
printf("1. Winner is B!\n");
else
printf("1. Draw!\n");
printf("2. A: ");
for(i=0;i<3;i++)
{
printf("%c",Apoker[i].color);
if(Apoker[i].num=='1')
printf("10 ");
else
printf("%-3c",Apoker[i].num);
}
printf("\n");
printf("3. B: ");
for(i=0;i<3;i++)
{
printf("%c",Bpoker[i].color);
if(Bpoker[i].num=='1')
printf("10");
else
printf("%-3c",Bpoker[i].num);
}
printf("\n");
return 0;
}
展开全部
这道题以前在知道看到过有人问,难度不大,但是要考虑的东西比较多,分太少不想做
追问
我再次提高,这是我全部的分数了,作业马上就截至了,你能今晚做出来么
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我来回答,不过要给我一点时间。
更多追问追答
追问
加油啊。。我已经提高分数了。。。最好今晚能做出来啊
追答
程序正在测试中,采用了新型的算法。很快就OK。邮件以发送,注意查收。
函数 ZhipaiValid 有点错误且不够完善,应该是:
//判断纸牌是否合法
bool ZhipaiValid(Zhipai zp[3])
{
if (!zp[0].Valid() || !zp[1].Valid() || !zp[2].Valid())
return false; //输入的牌错误
if ((zp[0].get_weight() == zp[1].get_weight()) || (zp[0].get_weight() == zp[2].get_weight()) || (zp[1].get_weight() == zp[2].get_weight()))
return false; //存在相同的牌
return true;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询