package niuke;
/*LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)
...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,
如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”
不是顺子.....LL不高兴了,他想了想,
决定大\小 王可以看成任何数字,并且A看作1,J为11,Q为12,K为13。上面的5张牌就可以变成“
1,2,3,4,5”(大小王分别看作2和4),
“So Lucky!”。LL决定去买体育彩票啦。
现在,要求你使用这幅牌模拟上面的过程,然后告诉我们LL的运气如何,
如果牌能组成顺子就输出true,
否则就输出false。为了方便起见,你可以认为大小王是0。*/
public class PuKe {
public static void main(String[] args) {
int[] a = {1,3,4,0,0};
System.out.println(isContinuous(a));
}
public static boolean isContinuous(int [] numbers) {
int N = numbers.length;
boolean flag1 = true; //定义两个判断标志位
boolean flag2 = false;
if( 5 != N)
return false; //数组长度不对的话,则结果为false
int min = -1 ;
int max = -1;
int temp = 0;
while(numbers[temp] == 0) {
temp++; //找到除了大小王之外的数字,赋值给min和max
}
min = numbers[temp] ;
max = numbers[temp];
int count = 0 ;
for(int i = 1 ; i < N ; i ++) {
if( (min > numbers[i]) && (numbers[i] != 0)) //找到最小数
min = numbers[i];
if( max < numbers[i] && (numbers[i] != 0) ) //找到最大数
max = numbers[i];
if( numbers[i] == 0 )
count ++; //找到大小王的个数
for(int j = i + 1 ; j < N ; j ++) {
if((numbers[i] == numbers[j]) && (numbers[i] != 0)) //如果有重复的数字则返回为false;
flag1 = false;
}
}
if( (max == min) && count == 4 ) //如果有4个王,还有1个数,则结果是正确的
return true;
if((max - min < 2) || (max - min > 4) ) //如果最大数和最小数之间的差距过大或者过小,都不能存在连续的情况
return false;
if( (max - min == 2 && count == 2) || (max - min == 3 && count >= 1) || (max - min == 4 ) )
//如果最大数最小数相差2,那么王的数目必须为两个,如果相差3,则必须有一个王,如果相差4,则结果一定为正
flag2 = true;
/*if(flag1 && flag2)
System.out.println("true");*/
return flag1 && flag2; //同时满足最大数最小数与王的组合情况和重复情况则可以判断结果
}
}
扑克牌顺子
最新推荐文章于 2021-06-03 13:23:21 发布