佇列之卡片遊戲

2021-06-17 15:31:58 字數 1997 閱讀 6023

桌上有疊牌,從第一張牌(即位於頂面的牌)開始從上往下依次編號為1~n。當至少還剩兩張牌時進行以下操作:把第一張牌扔掉,然後把新的第一張放一整疊牌的最後。輸入n,輸出每次扔掉的牌,以及最後剩下的牌。

樣例輸入:7

樣例輸出:1 3 5 74 2 6

【分析】

本題中牌像在排隊。每次從排頭拿到兩個,其中第二個再次排到尾部。這種資料結構稱為佇列。在資料結構稱為fifo(first in first out,先進先出)表。

用乙個陣列queue來實現這個佇列,可設兩個指標front和rear。

完整的程式如下:

#includeconstint maxn = 50;

int queue[maxn];

intmain()

return 0;

}

注意:上面的程式有bug。如果在最後把rear的值列印出來,rear比n大。即在程式執行的後期,queue[rear++]=queue[front++]讀寫了非法記憶體。也可以採取將陣列空間開大些,或採取一種稱為迴圈佇列的技術,重用已出隊元素占用的空間。

c++提供了一種更加簡單的處理方式——stl佇列。下面是**:

#include#include usingnamespace std;

queueq;

intmain()

return 0;

}

上面的程式的可讀性大大增強了,體現在「queue」、「front」見名知義的命名,使用了c++ stl。除此之外,上面的**還有兩個附加的好處。首先,不需要事先知道n的大小;其次,可以少用兩個變數front和rear。減少魔術數(magicnumber)和變數個數都是提高**可讀性、減少錯誤可能性的重要手段。

說明:(1)在acm競賽中,需要用到陣列、字串、佇列、堆疊、鍊錶、平衡二叉檢索樹等資料結構和排序、搜尋等演算法,以提高程式的時間、空間執行效率,這些資料結構,如果需要手工來編寫,那是相當麻煩的事情。

(2)ansi c++中包含了乙個c++ stl(standard template library),即c++標準模板庫,又稱為c++泛型庫,它在std命名空間中定義了常用的資料結構和演算法,使用起來十分方便。

(3)c++ stl元件

stl元件三種型別的元件:容器、迭代器和演算法,它們都支援泛型程式設計標準。

容器主要有兩類:順序容器和關聯容器。順序容器(vector、list、queue、string等)一系列元素的有序集合。關聯容器(set、multiset、map和mulimap)包含查詢元素的鍵值。

迭代器的作用是遍歷容器。

stl演算法庫包含四類演算法:排序演算法、不可變序演算法、變序性演算法和數值演算法。

(4)queue佇列容器

queue佇列容器是乙個先進先出(first in first out,fifo)線性儲存表,元素的插入只能在隊尾、元素的刪除只能在隊首。

使用queue需要宣告標頭檔案包含語句「#include 」,queue檔案在c:\program

files\microsoft visual studio\vc98\include資料夾裡。

queue佇列的操作有入隊push()(即插入元素)、出隊pop()(即刪除元素)、讀取隊首元素front()、讀取隊尾元素back()、判斷佇列是否為空empty()和佇列當前元素的數目size()。

下面給出乙個程式來說明queue佇列的使用方法。

#include#includeusingnamespace std;

intmain() {

//定義佇列,元素型別是整型

queueq;

//入隊,即插入元素

q.push(1);

q.push(2);

q.push(3);

q.push(9);

//返回佇列元素數量

cout<

執行結果: 4

0 19

1  2 3  9

1097卡片遊戲 queue佇列

描述 桌上有一疊牌,從第一張牌 即位於頂面的牌 開始從上往下依次編號為1 n。當至少還剩兩張牌時進行以下操作 把第一張扔掉,然後把新的第一張放到整疊牌的最後。輸入輸入n,n 1000000。輸出輸出每次扔掉的牌,以及最後剩下的牌。樣例輸入 7樣例輸出 1 3 5 7 4 2 6 這裡用到了stl的q...

uva 10935 卡片遊戲 佇列

題目 桌上有一疊牌,從第一張牌 即位於頂面的牌 開始從上往下依次編號為1 n。當至少還剩兩張牌的時進行以下操作 把第一張牌扔掉,然後把新的第一張放到整疊牌的最後。輸入n,輸出每次扔掉的牌,以及最後剩下的牌。資料範圍 n 50 樣例輸入 7 樣例輸出 discarded cards 1,3,5,7,4...

905 卡片遊戲

時間限制 1000 ms 記憶體限制 65535 kb 難度 1 描述 小明最近宅在家裡無聊,於是他發明了一種有趣的遊戲,遊戲道具是n張疊在一起的卡片,每張卡片上都有乙個數字,數字的範圍是0 9,遊戲規則如下 首先取最上方的卡片放到桌子上,然後每次取最上方的卡片,放到桌子上已有卡片序列的最右邊或者最...