java實(shí)現(xiàn)小貓釣魚游戲
題目要求:
兩人比賽,A,B,每人最開始分得6張手牌,手牌大小為從1到9
A先出牌,B后出牌,若出牌在桌面上存在,在出牌人獲得兩張相同牌中間的所有牌(包括兩張相同牌),放入出牌人手中。
最后誰手中無牌判為負(fù)
import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; import java.util.Stack; /** * 模擬實(shí)現(xiàn)兩人玩小貓釣魚游戲 * 判斷誰先出完誰獲勝 * @author zyk * */ public class PlayGame { public static void main(String[] args) { Stack<Integer> deskStack = new Stack<>();//桌子上的牌,用棧進(jìn)行管理 Queue<Integer> playerA = new LinkedList();//用隊(duì)列管理每個選手的牌 Queue<Integer> playerB = new LinkedList(); int book[] = new int[10]; Scanner scanner = new Scanner(System.in); //發(fā)牌,每人6張 for (int i = 0; i < 6; i++) { playerA.add(scanner.nextInt()); } for (int i = 0; i < 6; i++) { playerB.add(scanner.nextInt()); } //當(dāng)兩個隊(duì)列都不為空,表示游戲沒有結(jié)束 while (!playerA.isEmpty() && !playerB.isEmpty()) { int ta = playerA.peek();//A出一張牌 //判斷A出的牌能不能贏牌 if (book[ta] == 0) {//桌子上沒有這張牌 //A不能贏牌 playerA.remove();//打出的牌出隊(duì)列 deskStack.add(ta);//打出的牌入棧 book[ta]=1;//標(biāo)記打出的牌出現(xiàn)在桌子上 }else {//A能贏牌 playerA.remove();//打出的牌出隊(duì)列 playerA.add(ta);//打出的牌入隊(duì)列 while (deskStack.lastElement()!=ta) { book[deskStack.lastElement()] = 0; playerA.add(deskStack.lastElement()); deskStack.pop(); } } int tb = playerB.peek();//B出一張牌 //判斷B出的牌能不能贏牌 if (book[tb] == 0) {//桌子上沒有這張牌 //B不能贏牌 playerB.remove();//打出的牌出隊(duì)列 deskStack.add(tb);//打出的牌入棧 book[tb]=1;//標(biāo)記打出的牌出現(xiàn)在桌子上 }else {//B能贏牌 playerB.remove();//打出的牌出隊(duì)列 playerB.add(tb);//打出的牌入隊(duì)列 while (deskStack.lastElement()!=tb) { book[deskStack.lastElement()] = 0; playerB.add(deskStack.lastElement()); deskStack.pop(); } } } if (playerA.isEmpty()) { System.out.println("B贏了"); System.out.print("B手中的牌為:"); while (!playerB.isEmpty()) { System.out.print(playerB.peek()+" "); playerB.remove(); } }else { System.out.println("A贏了"); System.out.print("A手中的牌為:"); while (!playerA.isEmpty()) { System.out.print(playerA.peek()+" "); playerA.remove(); } } System.out.println(""); System.out.print("桌子上的牌為:"); while (!deskStack.isEmpty()) { System.out.print(deskStack.lastElement()+" "); deskStack.pop(); } } }
實(shí)例:
輸入:
2 4 1 2 5 6
3 1 3 5 6 4輸出:
A贏了
A手中的牌為:5 6 2 3 1 4 6 5
參考: 《啊哈算法》第二章 棧,隊(duì)列,鏈表
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java并發(fā)教程之volatile關(guān)鍵字詳解
這篇文章主要給大家介紹了關(guān)于Java并發(fā)教程之volatile關(guān)鍵字的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Java具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11java中利用List的subList方法實(shí)現(xiàn)對List分頁(簡單易學(xué))
本篇文章主要介紹了java中l(wèi)ist數(shù)據(jù)拆分為sublist實(shí)現(xiàn)頁面分頁的簡單代碼,具有一定的參考價(jià)值,有需要的可以了解一下。2016-11-11Request的包裝類HttpServletRequestWrapper的使用說明
這篇文章主要介紹了Request的包裝類HttpServletRequestWrapper的使用說明,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-08-08java將文件轉(zhuǎn)成流文件返回給前端詳細(xì)代碼實(shí)例
Java編程語言提供了強(qiáng)大的文件處理和壓縮能力,下面這篇文章主要給大家介紹了關(guān)于java將文件轉(zhuǎn)成流文件返回給前端的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-07-07Java如何實(shí)現(xiàn)調(diào)用外部Api
這篇文章主要介紹了Java如何實(shí)現(xiàn)調(diào)用外部Api問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-05-05spring啟動后保證創(chuàng)建的對象不被垃圾回收器回收
最近看到一個問題是,spring在啟動后如何保證創(chuàng)建的對象不被垃圾回收器回收?。所以本文結(jié)合jvm的垃圾回收機(jī)制和spring中的源代碼做出自己的一點(diǎn)猜測。有需要的朋友們可以參考借鑒。2016-09-09Java實(shí)現(xiàn)單向鏈表反轉(zhuǎn)
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)單向鏈表反轉(zhuǎn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-03-03