由于两个同学学习了很久,想要打牌放松一下,但是他们两个眼睛有点花了,看不清牌的花色,只看得清牌的点数。所以他们改良了一了规则。
规则如下:
1.不分花色,只有牌的点数(2-10)
2.每个人三张牌,一共有4种牌型,按牌型大小排序如下:
(1)三同:三张牌点数相同,如6 6 6,8 8 8
(2)顺子:三张牌点数连续,如3 4 5,5 6 7
(3)对子:两张牌点数相同,另一张不同,如2 3 3,7 7 8
(4)单牌:三张牌点数都不同,且不连续,如2 3 5,9 4 7
3.牌型不同则牌型大的赢,否则按如下规则比较:
(1)三同:直接比较大小,如果相同则平局
(2)顺子:比较最大点数的大小,如果相同则平局
(3)对子:比较对子的大小,如果相同比较单牌的大小,如果都相同则平局
(4)单牌:先比较最大的牌,如果相同比较第二大的牌,如果相同则比较最小的牌,如果都相同则平局
你作为裁判需要判断谁是胜利者。
输入描述:
第一行输入一个整数t,代表有t组测试数据,
对于每组测试数据,
输入连续6个整数,a,b,c,d,e,f,其中a,b,c代表benTuTuT的牌,其中d,e,f代表XXL的牌
1<=t<=1000
2<=a,b,c,d,e,f<=10
输出描述:
对于每组测试数据,如果benTuTuT胜利则输出"benTuTuT win!",如果XXL胜利则输出"XXL win!",否则输出"No winner!"
并且对于每组数据,答案占单独的一行。
PS:请输出双引号内的所有内容,并且请勿输出双引号!
示例
输入:
7
2 3 4 3 4 5
3 3 3 6 6 6
2 3 5 2 3 6
2 2 3 2 2 4
10 10 9 2 3 4
2 2 2 8 9 10
7 7 7 7 7 7
输出:
XXL win!
XXL win!
XXL win!
XXL win!
XXL win!
benTuTuT win!
No winner!
#include<stdio.h>
int Sun(int,int,int);//判断是否为顺子
int Dui(int a ,int b ,int c,int*q);//判断是否为对子,若是返回值为对子,指针为单数
int max(int *p1,int *p2,int *p3);//使a>b>c
int main()
{
int t;//测试次数
int i,j;//循环控制
int a,b,c,d,e,f;
int g,y;
int *p=&g,*q=&y; //返回对子最大值
scanf("%d",&t); //输入循环次数
int o[t]; // 1 benTuTuT win!;2 XXL win!;0 No winner!
for(i=0;i<t;i++)
{
scanf("%d %d %d %d %d %d",&a,&b,&c,&d,&e,&f);
if(a==b&&a==c){ //若1为三同,执行以下
if(d==e&&d==f){ //若1为三同,2也为三同执行以下
if(a==d)
o[i]=0;
else if(a>d)
o[i]=1;
else
o[i]=2;
}
else //若1为三同,2不为三同
o[i]=1;
}
else if(d==e&&e==f) // 1不为三同,2为三同
o[i]=2;
else // 没有三同
if(Sun(a,b,c)) //abc为顺子
{
if(Sun(d,e,f)){
if(f>c)
o[i]=2;
else if(f==c)
o[i]=1;
else
o[i]=0;
}
else
o[i]=1;
}
else //abc不为顺子
if(Sun(d,e,f)){ //2为顺子
o[i]=2;
}
else{
int s,w;
s=Dui(a,b,c,&g);
w=Dui(d,e,f,&y);
if(s||w) //没有三同也没有顺子
{
if(s)//1为对子
{
if(w) //2也为对子
{
if(s==w)//对子相等,比较单独的数
{
if(g==y)
o[i]=0;
if(g>y)
o[i]=1;
if(y>g)
o[i]=2;
} //对子不等,比较对子
else if(s>w)
o[i]=1;
else
o[i]=1;
}
else //1为对子2不是对子
o[i]=1;
}
else if(w) //1不是对子,2是
o[i]=2;
}
else //都不是,比较大小
{
max(&a,&b,&c);
max(&d,&e,&f);
if(c>f) //比较最大的
o[i]=1;
else if(c<f)
o[i]=2;
else //最大相等,比较第二大的
{
if(b>e)
o[i]=1;
else if(e<b)
o[i]=2;
else //前面的都相等,比较最小的
{
if(a>d)
o[i]=1;
else if(a<d)
o[i]=2;
else
o[i]=0;
}
}
}
}
}
for(i=0;i<t;i++)
{
if(o[i]==0)
printf("No winner!\n");
else if(o[i]==1)
printf("benTuTuT win!\n");
else if(o[i]==2)
printf("XXL win!\n") ;
}
return 0;
}
Sun(int a,int b,int c)
{
int x=0;
int t;//替代,交换abc,使a>b>c
if(a>b) /*如果a大于b,借助中间变量t实现a与b值的互换*/
{
t = a;
a = b;
b = t;
}
if(a>c) /*如果a大于c,借助中间变景t实现a与c值的互换*/
{
t = a;
a = c;
c = t;
}
if(b>c) /*如果b大于c,借助中间变量t实现b与c值的互换*/
{
t = b;
b = c;
c = t;
}
if(a+1==b&&b+1==c)
{
x=1;
}
return x;
}
Dui (int a,int b,int c,int *q)
{
int x=0;
if(a==b){
x=a;
*q=c;
}
else if(a==c){
x=a;
*q=b;
}
else if(b==c){
x=b;
*q=a;
}
return x;
}
max(int *p1,int *p2,int *p3)
{
int t;
if(*p1>*p2) /*如果a大于b,借助中间变量t实现a与b值的互换*/
{
t = *p1;
*p1 = *p2;
*p2 = t;
}
if(*p1>*p3) /*如果a大于c,借助中间变景t实现a与c值的互换*/
{
t = *p1;
*p1 = *p3;
*p1 = t;
}
if(*p2>*p3) /*如果b大于c,借助中间变量t实现b与c值的互换*/
{
t = *p2;
*p2 = *p3;
*p3 = t;
}
}
问题:
1.函数使用指针时,应使用p(int )而不是p(int );
2.实数希望在函数中变换数可以使用指针函数且用&a输入不用再建立指针。
3.指针在使用前需先指向一个数
4.不能p=q,希望把q的值赋给p;在q==NULL时,*p=*q非法操作