编程题:扑克牌顺子

题目描述

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


我的座右铭:不会,我可以学;落后,我可以追赶;跌倒,我可以站起来;我一定行。


猜你喜欢

转载自blog.csdn.net/weixin_39220472/article/details/80663047