一副牌中发五张扑克牌给你:让你判断数字的组成: 有以下几种情况: 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
感觉程序十分的冗余, 今天有点晚了,有时间再改吧。。。