<listing id="17fpr"><cite id="17fpr"><ruby id="17fpr"></ruby></cite></listing>
<menuitem id="17fpr"><noframes id="17fpr"><thead id="17fpr"></thead>
<var id="17fpr"><strike id="17fpr"></strike></var>
<menuitem id="17fpr"><dl id="17fpr"></dl></menuitem> <var id="17fpr"></var>
<var id="17fpr"></var><cite id="17fpr"><strike id="17fpr"><listing id="17fpr"></listing></strike></cite>
<var id="17fpr"><strike id="17fpr"></strike></var>
<var id="17fpr"></var>
<var id="17fpr"><strike id="17fpr"></strike></var><var id="17fpr"></var><cite id="17fpr"></cite>
<var id="17fpr"><strike id="17fpr"><listing id="17fpr"></listing></strike></var>
<var id="17fpr"></var>
<var id="17fpr"><strike id="17fpr"></strike></var><cite id="17fpr"></cite>
<menuitem id="17fpr"></menuitem>
<cite id="17fpr"><strike id="17fpr"><thead id="17fpr"></thead></strike></cite>
<cite id="17fpr"><strike id="17fpr"><listing id="17fpr"></listing></strike></cite>
<var id="17fpr"><dl id="17fpr"></dl></var><cite id="17fpr"></cite>
歡迎訪問釣魚網,請記住本站域名 www.dmg-elevators.com
以魚為媒,以釣會友。

首頁 > 釣魚視頻 > 四海釣魚 > 裝備發燒友

教你如何解決贏牌的問題,你值得擁有!

admin2 2024-02-26 裝備發燒友 評論

小貓釣魚(卡牌游戲)- C 語言 小貓釣魚(卡牌游戲)- C 語言

闡明:

周日,小橫和小海一起玩棋盤游戲。 他們正在玩一種很奇怪的撲克游戲——“小貓釣魚”。 游戲規則如下:將一副撲克牌分成兩等份,每人拿一份。 蕭恒首先拿出了手中的第一張撲克牌,放在了桌子上。 隨后蕭哈也拿出了手中的第一張撲克牌,放在了蕭衡剛剛打出的撲克牌之上。 他們就這樣交替著。 玩你的牌。 打牌時,如果某人打出的牌與桌上的牌面相同,則可以將兩張相同的牌以及它們之間的所有牌取走并放在其手中的牌的末尾。 當任何人手中的牌全部打完時,游戲結束,對手獲勝。 如果游戲開始時,小哈手上有6張牌,順序為2 4 1 2 5 6,小哈手上也有6張牌,順序為3 1 3 5 6 4,最終誰會獲勝? 現在你可以拿出卡片來嘗試一下。 接下來,請編寫一個程序來自動確定誰會獲勝。

  這里我們做一個約定,小哼和小哈手中牌的牌面只有 1~9。

分析:

我們先來分析一下這個游戲有哪些操作。 小橫有兩種操作小貓釣魚牌的游戲,即打牌和贏牌。 這對應了隊列的兩個操作。 打出一張牌就意味著離開隊伍,贏得一張牌就意味著加入隊伍。 肖哈的***工作和肖恒的一樣。 桌子是一個棧,每打出一張牌放到桌子上,就相當于被推入棧中。 當有人贏得一張牌時,他們會將牌一張一張地從桌子上拿走,這相當于彈出堆棧。 那么如何解決贏牌問題呢? 贏牌的規則是:如果有人打出的牌與桌上的牌相同,則兩張牌以及它們之間的牌都可以被移除。 那么你怎么知道桌上已經有哪些牌呢? 最簡單的方法是枚舉桌上的每張牌,當然還有更好的方法我們稍后會討論。 好吧,總結一下,我們需要兩個隊列和一個堆棧來模擬整個游戲。

代碼:

小貓釣魚牌游戲怎么玩_小貓釣魚牌游戲教案_小貓釣魚牌的游戲

#include 
struct queue{//定義隊列
	int data[1000];
	int head;
	int tail;
};
struct stack//定義棧
{
	int data[10];
	int top;
};
int main() {
	struct queue q1, q2;//模擬小哈和小哼
	struct stack s;//模擬桌子上的牌
	int i,t;
	int book[10];//對桌子上的牌做標記
	//初始化值
	q1.head = 1; q1.tail = 1;
	q2.head = 1; q2.tail = 1;
	//初始化棧頂
	s.top = 0;
	//初始化計數器
	for (i = 1; i < 10; i++)
		book[i] = 0;
	//逐個輸入  小哼
	printf("請輸入小哼手上的6張牌:");
	for (i = 1; i <= 6; i++) {
		scanf_s("%d", &q1.data[q1.tail]);
		q1.tail++;
	}
	//逐個輸入  小哈
	printf("請輸入小哈手上的6張牌:");
	for (i = 1; i <= 6; i++) {
		scanf_s("%d", &q2.data[q2.tail]);
		q2.tail++;
	}
	//當隊列不為空的時候執行循環
	while (q1.head < q1.tail && q2.head < q2.tail) {
		t = q1.data[q1.head];//小哼出一張牌
		//判斷小哼當前打出的牌是否能贏牌
		if (book[t] == 0) {//表明桌上沒有牌面為t的牌
			//小哼此輪沒有贏牌
			q1.head++;//小哼已經打出一張牌,所以要把打出的牌出隊
			s.top++;
			s.data[s.top] = t; //再把打出的牌放到桌上,即入棧
			
			book[t] = 1;//標記桌上現在已經有牌面為t的牌
		}
		else{
			//小哼此輪可以贏牌
			q1.head++;//小哼已經打出一張牌,所以要把打出的牌出隊
			q1.data[q1.tail] = t;//緊接著把打出的牌放到手中牌的末尾
			q1.tail++;
			while (s.data[s.top] != t) {//把桌上可以贏得的牌依次放到手中牌的末尾
				book[s.data[s.top]] = 0;//取消標記
				q1.data[q1.tail] = s.data[s.top];//依次放入隊尾
				s.top--;//棧中少了一張牌,所以棧頂要減1
				q1.tail++;
			}
			
		}
		t = q2.data[q2.head];//小哈出一張牌
		//判斷小哈當前打出的牌是否能贏牌
		if (book[t] == 0) {//表明桌上沒有牌面為t的牌
			//小哈此輪沒有贏牌
				q2.head++;//小哈已經打出一張牌,所以要把打出的牌出隊
				s.top++;
				s.data[s.top] = t;//再把打出的牌放到桌上,即入棧
				
				book[t] = 1;//標記桌上現在已經有牌面為t的牌
		}
		else {
			//小哈此輪可以贏牌
			q2.head++;//小哈已經打出一張牌,所以要把打出的牌出隊
			q2.data[q2.tail] = t;//緊接著把打出的牌放到手中牌的末尾
			q2.tail++;
			while (s.data[s.top] != t) {//把桌上可以贏得的牌依次放到手中牌的末尾
				book[s.data[s.top]] = 0;//取消標記
				q2.data[q2.tail] = s.data[s.top];//依次放入隊尾
				s.top--;
				q2.tail++;
			}
		}
	}
	if (q2.head == q2.tail) {
		printf("小哼WIN!n");
		printf("小哼手里的牌是:");
		for (i = q1.head; i < q1.tail; i++) {
			printf("%d ", q1.data[i]);
		}
		if (s.top != 0) {//如果桌上有牌則依次輸出桌上的牌
			printf("n桌上的牌是:");
			for (i = 1; i <= s.top; i++) {
				printf("%d ", s.data[i]);
			}
		}
		else {
			printf("桌上已經沒牌了!");
		}
	}
	if (q1.head == q1.tail) {
		printf("小哈WIN!n");
		printf("小哈手里的牌是:");
		for (i = q2.head; i < q2.tail; i++) {
			printf("%d ", q1.data[i]);
		}
		if (s.top != 0) {
			printf("n桌上的牌是:");
			for (i = 1; i <= s.top; i++) {
				printf("%d ", s.data[i]);
			}
		}
		else {
			printf("桌上已經沒牌了!");
		}
	}
	getchar(); getchar();
	return 0;
}

進入:

請輸入小哼手上的6張牌:2 4 1 2 5 6
請輸入小哈手上的6張牌:3 1 3 5 6 4

小貓釣魚牌游戲教案_小貓釣魚牌游戲怎么玩_小貓釣魚牌的游戲

輸出:

小哼WIN!
小哼手里的牌是:5 6 2 3 1 4 6 5
桌上的牌是:2 1 3 4

總結:

隊列:(11條消息)解密數字-隊列-C語言博客-CSDN博客

棧:(11條消息)回文數(棧)-c語言博客-CSDN博客

Tags:隊列 撲克 博客 小貓 釣魚

欄目排行
欄目推薦
    熱門tag
    鯽魚 餌料 鱸魚 路亞 海釣 競技 北京 比賽 手竿 海竿 野釣 拋竿 翹嘴 餌料配方 窩料 泄力器 遛魚 船釣 夜釣 爆炸鉤 冰釣
    最新評論
    一二三四高清免费播放视频