溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Java撲克牌順子怎么實(shí)現(xiàn)

發(fā)布時(shí)間:2021-12-13 15:00:34 來源:億速云 閱讀:155 作者:iii 欄目:大數(shù)據(jù)

本篇內(nèi)容主要講解“Java撲克牌順子怎么實(shí)現(xiàn)”,感興趣的朋友不妨來看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“Java撲克牌順子怎么實(shí)現(xiàn)”吧!

題目

LL今天心情特別好,因?yàn)樗ベI了一副撲克牌,發(fā)現(xiàn)里面居然有2個(gè)大王,2個(gè)小王(一副牌原本是54張^_^)...他隨機(jī)從中抽出了5張牌,想測(cè)測(cè)自己的手氣,看看能不能抽到順子,如果抽到的話,他決定去買體育彩票,嘿嘿??!“紅心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是順子.....LL不高興了,他想了想,決定大\小 王可以看成任何數(shù)字,并且A看作1,J為11,Q為12,K為13。上面的5張牌就可以變成“1,2,3,4,5”(大小王分別看作2和4),“So Lucky!”。LL決定去買體育彩票啦?,F(xiàn)在,要求你使用這幅牌模擬上面的過程,然后告訴我們LL的運(yùn)氣如何, 如果牌能組成順子就輸出true,否則就輸出false。為了方便起見,你可以認(rèn)為大小王是0。

分析

就是一個(gè)數(shù)組,0表示大小王,可以當(dāng)癩子,其他的最小是1,最大是13,求給出的這個(gè)數(shù)組能否組成順子。

我們仔細(xì)想想一個(gè)正常的順子,比如6,7,8,9,10. 那最大值和最小值差為4,并且不能重復(fù)。所以我們應(yīng)該得出兩個(gè)結(jié)論。1,最大值和最小值相差小于等于4,為什么會(huì)小于4呢,因?yàn)橛邪]子0導(dǎo)致的。2.除了癩子0以外,其他的數(shù)字不能重復(fù)。

所以根據(jù)上面的條件我們就可以寫出算法了。求出最小值,最大值。

重復(fù)數(shù)字怎么判斷呢?先判斷是否為0,不為0,將這個(gè)數(shù)字作為腳標(biāo)存到另一個(gè)數(shù)組中,并計(jì)數(shù)加1,從而判斷是否重復(fù)。

解法

public boolean isContinuous(int [] numbers) {
       int count[]=new int[14];
       if(numbers==null|| numbers.length<1){
           return false;
       }
       int min=14;
       int max=0;
       for(int i=0;i<numbers.length;i++){
           if(numbers[i]==0){
               continue;
           }else if(count[numbers[i]]>0) {
          //如果存在重復(fù)的數(shù)字就返回false;
               return false;
           }else if(numbers[i]<min){
                   min=numbers[i];
           }else if(numbers[i]>max){
                   max=numbers[i];
           }
           count[numbers[i]]++;
       }
       if(max-min<5){
           return true;
       }
       return false;
   }

測(cè)試

main方法

public static void main(String[] args) {
       Solution solution=new Solution();
       int array[]={1,5,3,3,4,};
       System.out.println(solution.isContinuous(array));
   }

Java撲克牌順子怎么實(shí)現(xiàn)

番外

測(cè)試的時(shí)候發(fā)現(xiàn)??蜕系倪@道題測(cè)試用例不全。比如我最開始這樣寫的

for(int i=0;i<numbers.length;i++){
           if(numbers[i]==0){
               continue;
           }else if(numbers[i]==min||numbers[i]== max) {
            //如果存在重復(fù)的數(shù)字就返回false;
               return false;
           }else if(numbers[i]<min){
                   min=numbers[i];
           }else if(numbers[i]>max){
                   max=numbers[i];
           }
           count[numbers[i]]++;
       }

可以看到我通過

(numbers[i]==min||numbers[i]== max

來判斷是否存在重復(fù)的數(shù)字,其實(shí)這是不正確的,比如我是上面的測(cè)試用例1,5,3,3,4就不滿足上面的要求。Java撲克牌順子怎么實(shí)現(xiàn)

到此,相信大家對(duì)“Java撲克牌順子怎么實(shí)現(xiàn)”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI