約瑟夫環問題——初步瞭解+陣列實現
約瑟夫環問題——初步瞭解+陣列實現
一開始接觸約瑟夫環問題,還是在C語言的書中,具體的題目如下:n個人圍坐成一圈,選某個人開始(比如第1個),從1開始報數,沿著順時針方向數到m的人被淘汰,然後後面一個人繼續再從1開始報數,數到m時再淘汰一人。重複上面的過程,輸出剩下的最後一個人。
解題思路:
Step 1:建立一個長度為n的陣列;
Step 2:刪除的位置編號為i = (i + m -1) % n; 為什麼呢?因為第一個人事i = 0,然後 i 增加m-1即可刪除另外一個人,把陣列想象成一個“環”即可。
Step 3:刪除 i 之後,後面的陣列元素往前移動;
Step 4:當 i 正好是陣列中最後一個數,刪除之後,由於後面的新的 i 無法移動(後面沒有數了),所以令 i =0;
程式碼實現如下,這個是用陣列實現的:
#include <iostream>
using namespace std;
int main()
{
int m, n;
cin >> n >> m;
int *p=new int[n];
int i;
for(i = 0; i < n; i++) //初始化
{
p[i]=i + 1;
}
while(n > 1)
{
i = (i + m - 1) % n; //找到需要刪除的位置
cout << p[i] << "被刪除" <<endl;
for(int j = i + 1; j < n; j++) //只能是j=i+1
{
p[j - 1]=p[j];
}
n--;
if(i == n) //如果刪除的是最後一個元素,那麼需要把i重新置為0
{
i = 0;
}
}
cout << "剩下的是" << p[i] <<endl;
delete []p;
return 0;
}
結果如下:
此外,還可以用連結串列、佇列、堆疊等實現,後面再寫。
相關文章
- 陣列解決約瑟夫環問題陣列
- 約瑟夫環(陣列實現)陣列
- 面試題—Java遞迴實現約瑟夫環面試題Java遞迴
- C語言陣列實現約瑟夫環出圈問題 程式碼詳細註釋 簡單易懂C語言陣列
- 約瑟夫(Josephus problem)環問題初探
- IOS 約瑟夫環遊戲的實現iOS遊戲
- javascript中使用迴圈連結串列實現約瑟夫環問題JavaScript
- 約瑟夫環 佇列+連結串列佇列
- 約瑟夫問題pascal程式
- 約瑟夫環遊戲遊戲
- 約瑟夫環(vector類解決)
- java環形連結串列約瑟夫環問題筆記Java筆記
- 迴圈連結串列(約瑟夫問題)--python實現Python
- 約瑟夫生者死者遊戲問題遊戲
- 用Python實現約瑟夫環演算法Python演算法
- 約瑟夫環(Josephus)問題--報數遊戲(連結串列)遊戲
- 連結串列面試題(八)---約瑟夫環面試題
- 牛客題霸NC132環形連結串列的約瑟夫問題Java題解Java
- P1996 約瑟夫問題996
- 資料結構實驗一:順序表的建立與操作實現、順序表實現約瑟夫環問題資料結構
- 【圖解經典演算法題】如何用一行程式碼解決約瑟夫環問題圖解演算法行程
- 實戰資料結構(4)_迴圈單連結串列解決約瑟夫問題資料結構
- 約瑟夫環(超好的程式碼存檔)--19--約瑟夫環--LeetCode面試題62(圓圈最後剩下的數字)LeetCode面試題
- js利用指標操作約瑟夫問題程式碼例項JS指標
- 物件導向程式設計 約瑟夫問題簡要分析物件程式設計
- 洛谷題單指南-線性表-P1996 約瑟夫問題996
- 約瑟夫出圈演算法演算法
- leetcode題解(陣列問題)LeetCode陣列
- 使用陣列實現環形佇列Scala版本陣列佇列
- TypeScript初步瞭解TypeScript
- Docker初步瞭解Docker
- 3.2資料結構之指標和連結串列 1748:約瑟夫問題資料結構指標
- 最大子陣列和問題的解陣列
- ActiveMQ的初步瞭解MQ
- php陣列問題PHP陣列
- 實驗九 類與物件(一) 程式片段程式設計題 5. 約瑟夫問題2020-12-12物件程式設計
- 初步瞭解 JS 繼承JS繼承
- 大資料初步瞭解大資料