c语言编程问题。。。这是一个作业。。实在不会写,求大神帮忙。。。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言编程问题。。。这是一个作业。。实在不会写,求大神帮忙。。。相关的知识,希望对你有一定的参考价值。
背景:两个人每人发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分都没有人么。。
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;
追问
这个程序没过。。
改完能发我吗。。。上面有提供mail。。。就这一个。。。
已发送,请注意查收
参考技术A 这道题以前在知道看到过有人问,难度不大,但是要考虑的东西比较多,分太少不想做追问我再次提高,这是我全部的分数了,作业马上就截至了,你能今晚做出来么
参考技术B 我来回答,不过要给我一点时间。追问加油啊。。我已经提高分数了。。。最好今晚能做出来啊
追答程序正在测试中,采用了新型的算法。很快就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;
我邮箱有回复你
以上是关于c语言编程问题。。。这是一个作业。。实在不会写,求大神帮忙。。。的主要内容,如果未能解决你的问题,请参考以下文章
C++编程题,求大神指教,实在是小白不会。已知速度和时间和加速度。框架也有了,但是真的不太会