[問題描述]
基於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...