打牌

由于两个同学学习了很久,想要打牌放松一下,但是他们两个眼睛有点花了,看不清牌的花色,只看得清牌的点数。所以他们改良了一了规则。
规则如下:
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非法操作

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值