判断扑克牌的数值情况(5张)

一副牌中发五张扑克牌给你:让你判断数字的组成: 有以下几种情况: 1:四条:即四张一样数值的牌(牌均不论花色)2:三条带一对 3:三条带两张不相同数值的牌 4:两对 5:顺子包括 10,J,Q,K,A 6:什么都不是 7:只有一对

#include <stdio.h>
void sort(int data[], int len){
	//排序, 由小到大
	int i, j;
	int temp;
	for(i = 0; i < len; i++){
		for(j = i+1; j < len; j++){
			if(data[i] > data[j]){
				temp = data[i];
				data[i] = data[j];
				data[j] = temp;
			}
		}
	}
}
int isshunzi(int card[], int len){
	//判断是不是顺子,是的话返回1, 否则返回0
	//pre:	card  是由小到大排列
	int i = 0;
	for(i = 0; i < len - 1; i++){
		if(card[i] != (card[i + 1] - 1)){
			return 0;
		}
	}
	return 1;
}
void cardtest(int card[]){
	int i;
	int temp[5] = {0, 0, 0, 0, 0};//存储个数
	int *pointer = temp;
	//首先对card数组排序,由小到大
	sort(card, 5);
	//对card数组中的数值个数统计
	for(i = 0; i < 5; i++){
		if(i == 0){ 
			(*pointer)++;
		}else if (card[i] == card[i - 1]){
			(*pointer)++;
		}else{
			pointer++;
			(*pointer)++;
		}
	}
	if((*(temp) == 4) || (*(temp + 1) == 4) || (*(temp + 2) == 4) || 
             (*(temp + 3) == 4) || (*(temp + 4) == 4)){
		printf("四张数值一样的牌\n");	return;
	}else if((*(temp) == 3) || (*(temp + 1) == 3) || (*(temp + 2) == 3) 
             || (*(temp + 3) == 3) || (*(temp + 4) == 3)){
		if((*(temp) == 2) || (*(temp + 1) == 2) || (*(temp + 2) == 2) || 
                    (*(temp + 3) == 2) || (*(temp + 4) == 2)){
			printf("三张带一对\n");		return;
		}else{
			printf("三张带两张不同的牌\n");	return;
		}
	}else if((*(temp) == 2) || (*(temp + 1) == 2) || (*(temp + 2) == 2) || 
             (*(temp + 3) == 2) || (*(temp + 4) == 2)){
		int count = 0, index = 0;
		for(index = 0; index < 5; index++){
			if(*(temp + index) == 2){ count++;}
		}
		if(count == 2){
			printf("两对\n");	return;
		}
		else{
			printf("一对\n");	return;
		}
	}
	if(isshunzi(card, 5)){
		printf("顺子\n");	return;
	}
	printf("什么都不是\n");
	return;
}
void printfdata(int data[], int len){
	int i;
	for(i = 0; i < len; i++){
		printf("%d\t", data[i]);
	}
}
void main(){
	int card1[] = {2, 3, 4, 5, 6};
	int card2[] = {1, 3, 2, 9, 10};
	int card3[] = {13, 13, 2, 4, 5};
	int card4[] = {2, 3, 2, 3, 13};
	int card5[] = {4, 12, 4 , 4, 12};
	int card6[] = {4, 12, 4 , 4, 11};
	int card7[] = {4, 12, 4 , 4, 4};
	printfdata(card1, 5);
	cardtest(card1);

	printfdata(card2, 5);
	cardtest(card2);

	printfdata(card3, 5);
	cardtest(card3);

	printfdata(card4, 5);
	cardtest(card4);

	printfdata(card5, 5);
	cardtest(card5);

	printfdata(card6, 5);
	cardtest(card6);

	printfdata(card7, 5);
	cardtest(card7);

	getchar();

}

【出错记录】1.判断是不是顺子的条件第一次误写为:*(temp + 4) - *temp == 4  

  感觉程序十分的冗余, 今天有点晚了,有时间再改吧。。。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值