實驗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;
}
相關文章
- 線性蒙皮分解演算法及其在遊戲中的應用演算法遊戲
- 資料結構實驗三:線性表綜合實驗資料結構
- 整合運放線性區運用的模擬實驗
- 實驗二:順序表的基本操作實現及其應用
- 資料結構與演算法實驗1——線性表的應用之棧與佇列資料結構演算法佇列
- 線性表及其實現
- 線性表的使用——順序實現
- 實現elementUI表單的全域性驗證UI
- 遊戲敘事的體驗路線研究遊戲
- 遊戲案例|Service Mesh 在歡樂遊戲的應用演變和實踐遊戲
- 線性表1.0(陣列實現)陣列
- 資料結構實驗之查詢七:線性之雜湊表資料結構
- 一種遊戲體驗曲線的拆解方法遊戲
- 線性表
- Google Play 應用與遊戲使用者體驗指南 (一)Go遊戲
- Google Play 應用與遊戲使用者體驗指南 (二)Go遊戲
- 線性表-順序表C語言實現C語言
- 線性表的基本操作
- 全景光照在遊戲中的應用遊戲
- AdConlony:遊戲應用內獎勵性視訊廣告報告遊戲
- 線性表 & 雜湊表
- 2.1線性表
- 長線運營遊戲中的劇情如何實現單機化體驗?遊戲
- 2020-2021年全球應用商店遊戲和移動應用支出(附原資料表) 遊戲
- AI在視訊遊戲中的應用AI遊戲
- 遊戲伺服器中JAVA的應用遊戲伺服器Java
- 遊戲設計裡的那些色彩應用遊戲設計
- 線性表及其演算法(java實現)演算法Java
- go語言使用切片實現線性表Go
- 2.2反射性xss案例演示反射
- SICP 2.2: 層次性資料和閉包性質(Python實現)Python
- 實驗10-使用keras完成線性迴歸Keras
- Chapter 1 線性表APT
- 2020-2021年全球應用商店遊戲和移動應用下載量(附原資料表) 遊戲
- 2.2. 第一個應用,遇到 no input file specified
- 線性表的結構詳解
- 《白色實驗室》:想象力是遊戲的翅膀遊戲
- 表單的應用