题目描述
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的运气如何。为了方便起见,你可以认为大小王是0。
思路:
理解题目意思 :
54张扑克,2个大王,2个小王,随机抽取5张,判断是否是连续的五个数
说明:
1.大小王可以当人任意的数
2.大小王是0作为标示
3.字母理解成对于数字
4.输入的是转换后的数
进一步理解:
0到13内的数,每个数有4张,共54张,其中抽取5张,判断能否组成连续的数
说明:0可以当作任意的数
先排序比较处理
重复数不是0,一定不可以组成连续数
没有0,当时连续数时候,五个数的和等于:(min+max)∗5/2(min+max)∗5/2,只需要判断和的值,按照下面思路,排序后的五个数间隔是:1111
1个0,判断四个数是否是连续数,是可以组成,否,判断排序后的四个数相邻元素是否只有一个相邻数对间隔2。按照下面思路,排序后四个数的
间隔是:111,211,121,112
2个0,这个比较复杂了,根据1个0的情况确实比较复杂,我们只需要判断排序后的三个数之间的间隔是多少,11,31,13,22这4种情况加0后是连续数
3个0,排序后的两个数间隔:1,2,3,4
4个0,一定可以组成
代码:
import java.util.*; /** * Created by ASUS on 2018/6/12 * * @Authod Grey Wolf */ public class Test1 { public static void main(String[] args) { Test1 test1 = new Test1(); test1.sys(); } private void sys() { int []arrs={1,3,0,0,5}; boolean flag=isContinuous(arrs); if(flag){ System.out.println("you lucky"); }else { System.out.println("oh my god"); } } private boolean isContinuous(int[] arrs) { int len=arrs.length; if (arrs == null||len!=5) { return false; } Arrays.sort(arrs); int flag=0; int i=0; int j; while (flag<len&&arrs[flag]==0){ flag++; } //flag就是0的个数 //判断剩余数中是否有相等元素,有相等就返回false for (j=flag;j<len-1;j++){ if (arrs[j]==arrs[j+1]){ return false; } } //判断区间内有几个数 int num=arrs[4]-arrs[flag]; return num<=4; } }
效果:
you lucky
Process finished with exit code 0