實驗2.2 線性表的應用:遊戲
實驗2.2 線性表的應用:遊戲
[問題描述]
基於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-8
4.輸出剩餘最後一個元素的值: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++)
{
v.push(i); //把i插入隊尾
}
時間複雜度O(n),空間複雜度O(n)
入隊出隊操作:
while(v.size() > 1)
{
int t = v.front(); //記錄下要出隊的元素的值
v.pop(); //隊頭出隊
if( !( num%k == 0 || num%10 == k) ) v.push(t); //不是k的倍數或者數的個位為k則入隊
num++;
}
時間複雜度為:O(kn),空間複雜度為θ(n)
實驗程式碼
#include<iostream>
#include<queue>
using namespace std;
int main()
{
int n,k;
cin>>n>>k;
queue <int> v;
for(int i=1;i<=n;i++)
{
v.push(i);
}
int num = 1;
while(v.size() > 1)
{
int t = v.front();
v.pop();
if( !( num%k == 0 || num%10 == k) ) v.push(t);
num++;
}
cout<<v.front()<<endl;
}
相關文章
- 資料結構:線性表的順序實現2.2資料結構
- 資料結構實驗三:線性表綜合實驗資料結構
- 線性蒙皮分解演算法及其在遊戲中的應用演算法遊戲
- 資料結構與演算法實驗1——線性表的應用之棧與佇列資料結構演算法佇列
- 線性表及其實現
- 實驗二:順序表的基本操作實現及其應用
- 2.2連線和路由表的維護路由
- 線性表的使用——順序實現
- 實現elementUI表單的全域性驗證UI
- 線性結構-線性表
- 線性表
- 線性表1.0(陣列實現)陣列
- 線性表分析及Java實現Java
- 資料結構實驗之查詢七:線性之雜湊表資料結構
- 線性表-順序表C語言實現C語言
- 移動應用可用性測試的實踐經驗總結
- 線性表的基本操作
- 對線性表的操作
- 內控上線實施應用體驗工作筆記0517筆記
- ORACLE應用經驗(5)-表空間Oracle
- 線性表及其演算法(java實現)演算法Java
- go語言使用切片實現線性表Go
- 實驗五 迭代法解線性方程組與非線性方程(android)Android
- Chapter 1 線性表APT
- 實驗10-使用keras完成線性迴歸Keras
- 資料結構中的線性表程式碼實現資料結構
- 實戰資料結構(7)_線性表的綜合操作資料結構
- ORACLE應用經驗(5)-表空間(轉)Oracle
- 遊戲策劃---實現一個非線性的故事(轉)遊戲
- 線性表的結構詳解
- 應用資料結構(一)線性表節點的插入和刪除演算法 (轉)資料結構演算法
- 8個華麗而實用的Java圖表應用Java
- ATC實驗室vSphere應用
- svg給直線應用線性漸變失效解決方案SVG
- 實驗一 直接法解線性方程組(android)Android
- 【機器學習】--線性迴歸從初識到應用機器學習
- 線性表的順序儲存C++程式碼實現C++
- 實用主義和實驗主義,偶然性和必然性