實驗2 2 線性表的應用 遊戲

2021-10-10 11:12:23 字數 2175 閱讀 5495

[問題描述]

基於stl實現以下功能:有n個小朋友圍成一圈玩遊戲,小朋友從1至n編號,2號小朋友坐在1號小朋友的順時針方向,3號小朋友坐在2號小朋友的順時針方向,……,1號小朋友坐在n號小朋友的順時針方向。

遊戲開始,從1號小朋友開始順時針報數,接下來每個小朋友的報數是上乙個小朋友報的數加1。若乙個小朋友報的數為k的倍數或其末位數(即數的個位)為k,則該小朋友被淘汰出局,不再參加以後的報數。當遊戲中只剩下乙個小朋友時,該小朋友獲勝。

例如,當n=5, k=2時:

1號小朋友報數1;

2號小朋友報數2淘汰;

3號小朋友報數3;

4號小朋友報數4淘汰;

5號小朋友報數5;

1號小朋友報數6淘汰;

3號小朋友報數7;

5號小朋友報數8淘汰;

3號小朋友獲勝。

給定n和k,請問最後獲勝的小朋友編號為多少?

[輸入形式]

輸入一行,包括兩個整數n和k,意義如題目所述。
[輸出形式]

輸出一行,包含乙個整數,表示獲勝的小朋友編號。
要處理的物件(資料):

通過鍵盤輸入的兩個整數n和k,以整型的形式儲存到計算機中,利用stl中的queue容器進行後續操作
要實現的功能:

利用stl模板,選擇乙個容器,建立乙個從元素值從1到n有n個整數的queue容器,

利用迴圈,進行入隊出隊操作,直到容器中只剩下乙個元素。

處理後的結果如何顯示:

將剩下的最後乙個元素的值輸出在螢幕上
【求解方法】

建立乙個從元素值從1到n有n個整數的queue容器,利用迴圈,做隊頭出隊操作

並記錄下出隊的元素值,如果是k的倍數或者數的個位為k則不再入隊,否則將其

插入隊尾,迴圈到只剩乙個元素則截止。

【樣例求解過程一】

1.輸入兩個整數: 5 2

2.建立乙個從元素值從1到5的queue容器:1 2 3 4 5

3.利用迴圈迴圈開始做出隊入隊操作:

2 3 4 5 1-1

3 4 5 1-2

4 5 1 3-3

5 1 3-4

1 3 5-5

3 5-6

5 3-7

3-84.輸出剩餘最後乙個元素的值:3

【樣例求解過程二】

1.輸入兩個整數: 7 3

2.建立乙個從元素值從7到3的queue容器:1 2 3 4 5 6 7

3.利用迴圈迴圈開始做出隊入隊操作:

2 3 4 5 6 7 1-1

3 4 5 6 7 1 2-2

4 5 6 7 1 2-3

5 6 7 1 2 4-4

6 7 1 2 4 5-5

7 1 2 4 5-6

1 2 4 5 7-7

2 4 5 7 1-8

4 5 7 1-9

5 7 1 4-10

7 1 4 5-11

1 4 5-12

4 5-13

5 4-14

4-15

4.輸出剩餘最後乙個元素的值:4

物理儲存方式: 整型

建立乙個從元素值從1到n有n個整數的queue容器,利用迴圈,做隊頭出隊操作

並記錄下出隊的元素值,如果是k的倍數或者數的個位為k則不再入隊,否則將其

插入隊尾,迴圈到只剩乙個元素則截止。

建立乙個從元素值從1到n有n個整數的queue容器:

for(int i=1;i<=n;i++) 

時間複雜度o(n),空間複雜度o(n)

入隊出隊操作:

while(v.size() > 1)

時間複雜度為:o(kn),空間複雜度為θ(n)

#include#includeusing namespace std;

int main()

int num = 1;

while(v.size() > 1)

cout<}

線性表實驗

實驗內容 建立乙個n個學生成績的順序表,對錶進行插入 刪除 查詢等操作。分別輸出結果。要求如下 1 用順序表來實現。ifndef seqlist h define seqlist h const int maxsize 20 class seqlist seqlist int a,int n seq...

線性表實驗

檔案 ifndef seqlist h 注意這裡 ifndef endif的用法 define seqlist h const int maxsize 10 class seqlist seqlist int a,int n seqlist void insert int i,int x int d...

線性表的應用

1 用順序表實現 include using namespace std define maxsize 100 typedef struct sqlist int initlist sqlist s void createlist sqlist s void listshow sqlist s ln...