C語言實(shí)現(xiàn)紙牌游戲之小貓釣魚算法
本文實(shí)例為大家分享了C語言實(shí)現(xiàn)小貓釣魚算法的具體代碼,供大家參考,具體內(nèi)容如下
星期天小哼和小哈約在一起玩桌游,他們正在玩一個(gè)非常古怪的撲克游戲——“小貓釣魚”。游戲的規(guī)則是這樣的:將一副撲克牌平均分成兩份,每人拿一份。小哼先拿出手中的第一張撲克牌放在桌上,然后小哈也拿出手中的第一張撲克牌,并放在小哼剛打出的撲克牌的上面,就像這樣兩人交替出牌。出牌時(shí),如果某人打出的牌與桌上某張牌的牌面相同,即可將兩張相同的牌及其中間所夾的牌全部取走,并依次放到自己手中牌的末尾。當(dāng)任意一人手中的牌全部出完時(shí),游戲結(jié)束,對手獲勝。(用兩個(gè)隊(duì)列和一個(gè)棧完成)
代碼如下:
#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <stdlib.h> /* * 游戲規(guī)則是這樣的,將一副撲克牌平均分成兩份,每人拿一份。小哼先拿出手中的第一張撲克牌放桌上,然后小哈也拿出手中的第一張撲克牌,并放在小哼剛打出的撲克牌的上面,就像這樣兩個(gè)人交替出牌。出牌時(shí),如果某人打出的牌與桌上某張牌的牌面相同,即可將兩張相同的牌及中間的牌全部拿走,并依次放到自己手中的牌的末尾。當(dāng)任意一個(gè)人手上的牌全部打完時(shí),另一個(gè)人獲勝 * 郭文峰 * 2018/9/29 */ struct queue { int data[1000]; int head; int tail; }; struct stack { int data[10]; int top; }; int main(void) { struct queue q1, q2; struct stack s; int i = 0; int t = 0; int book[10]; //初始化隊(duì)列 q1.head = 1; q1.tail = 1; q2.head = 1; q2.tail = 1; //初始化棧 s.top = 0; for (i = 0; i < 10; i++) { book[i] = 0; } //依次向隊(duì)列插入6個(gè)數(shù) //給小哼6張牌 for (i = 1; i <= 6; i++) { scanf("%d", &q1.data[q1.tail]); q1.tail++; } //依次向隊(duì)列插入6個(gè)數(shù) //給小哈6張牌 for (i = 1; i <= 6; i++) { scanf("%d", &q2.data[q2.tail]); q2.tail++; } //當(dāng)隊(duì)列不為空的時(shí)候執(zhí)行循環(huán) 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; } 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]; q1.tail++; s.top--; } } t = q2.data[q2.head];//小哈出一張牌 //判斷小哈打出的牌是否能贏 if (book[t] == 0)//表明桌上沒有牌面為t 的牌 { q2.head++; s.top++; s.data[s.top] = t; book[t] = 1; } 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]; q2.tail++; s.top--; } } } if (q2.head == q2.tail) { printf("小哼WIN\n"); printf("小哼手上還剩的牌為:"); for (i = q1.head; i <= q1.tail - 1; 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("桌上沒有牌了!\n"); } } else { printf("小哈WIN\n"); printf("小哈手上還剩的牌為:"); for (i = q2.head; i <= q2.tail - 1; i++) { printf(" %d", q2.data[i]); } if (s.top > 0) { printf("\n桌上的牌是:"); for (i = 1; i <= s.top; i++) { printf(" %d", s.data[i]); } } else { printf("桌上沒有牌了!\n"); } } system("pause"); return 0; }
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C++實(shí)現(xiàn)圖像目標(biāo)區(qū)裁剪ImageCropping
本文主要介紹了C++實(shí)現(xiàn)圖像目標(biāo)區(qū)裁剪ImageCropping,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06C++實(shí)現(xiàn)雷霆戰(zhàn)機(jī)可視化小游戲
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)雷霆戰(zhàn)機(jī)可視化小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-11-11c++實(shí)現(xiàn)一個(gè)簡易的網(wǎng)絡(luò)緩沖區(qū)的實(shí)踐
這篇文章主要介紹了c++實(shí)現(xiàn)一個(gè)簡易的網(wǎng)絡(luò)緩沖區(qū)的實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12