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分都没有人么。。

#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;

追问

这个程序没过。。

改完能发我吗。。。上面有提供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++编程题,求大神指教,实在是小白不会。已知速度和时间和加速度。框架也有了,但是真的不太会

C语言 循环与时间函数的问题,求大神教!我实现了有加分!

用C语言数据结构编写 删除顺序表中值为x的元素 跪求大神解答 ! !

linux系统作业,求代码过程

c语言通过空格分割字符串,并生成多个字符串数组

c语言问题