約瑟夫環(陣列實現)
有 m 個人, 每次數 n 個殺死,問從第幾個開始數可以保證第一個人活到最後。
#include<bits/stdc++.h>
#define ll long long
#define inf 0x3f3f3f3f
#define endl '\n'
using namespace std;
const int N = 1e6 + 100;
int a[N];
int n, m;
bool solve(int x)
{
int head = x - 1; // 因為數的時候要記第一個人,所以從第一個人的前一個開始。
for(int i = 0; i < m; i ++) //m個回合,每回合殺一個人
{
int j = 0;
while(j < n) //數n個活著的人
{
head = (head + 1) % m; //每次向後移一位並對總人數取模,保證head在【0,m - 1】區間內。
if(a[head] == 0) j ++; //標記為0說明這個人還活著,可以進入計數。
}
a[head] = 1; //標記為1說明這個人已經被殺了
if(i == m - 1) break; //如果到了最後一個回合活著的人是隊長的話就跳出,返回真
if(head == 0) return false; //如果在某個回合隊長被殺了就結束遊戲,返回假
}
return true;
}
void init()
{
memset(a, 0, sizeof a); //對陣列a進行初始化
}
int main()
{
cin >> m >> n;
if(m == 1) cout << "impossible" << endl; //m為1的時候不管怎麼殺都會死
else
{
for(int i = 0; i < m; i ++) //從第一個人開始列舉到從最後一個人開始,判斷哪種情況滿足隊長不死
{
init();
if(solve(i)) //如果從第i個人開始隊長不死的話,直接輸出這個人,並跳出迴圈
{
cout << i + 1; //陣列從零開始使用,所以編號需要 +1.
break;
}
}
}
return 0;
}
相關文章
- 用Python實現約瑟夫環演算法Python演算法
- 約瑟夫環遊戲遊戲
- 約瑟夫環問題
- 約瑟夫環(約瑟夫問題)求最後出列的人數
- C語言陣列實現約瑟夫環出圈問題 程式碼詳細註釋 簡單易懂C語言陣列
- 約瑟夫環(vector類解決)
- 約瑟夫環(線性列表的思想)
- 約瑟夫問題
- 約瑟夫環問題 猴子選大王問題
- 迴圈連結串列(約瑟夫問題)--python實現Python
- java環形連結串列約瑟夫環問題筆記Java筆記
- 約瑟夫環(超好的程式碼存檔)--19--約瑟夫環--LeetCode面試題62(圓圈最後剩下的數字)LeetCode面試題
- zcmu1862——zbj的狼人殺(約瑟夫環問題)
- UVALive 3882--And Then There Was One+約瑟夫環問題變形
- 猴子選大王,約瑟夫問題
- 約瑟夫環(Josephus)問題--報數遊戲(連結串列)遊戲
- 約瑟夫生者死者遊戲問題遊戲
- 資料結構實驗一:順序表的建立與操作實現、順序表實現約瑟夫環問題資料結構
- 約瑟夫問題(丟手絹問題)
- 使用陣列實現環形佇列Scala版本陣列佇列
- 約瑟夫·寇德卡:成為一個吉普賽人
- 牛客題霸NC132環形連結串列的約瑟夫問題Java題解Java
- 洛谷題單指南-線性表-P1996 約瑟夫問題996
- 【圖解經典演算法題】如何用一行程式碼解決約瑟夫環問題圖解演算法行程
- Objective-C環境下的靜態陣列實現Object陣列
- 陣列排序的實現陣列排序
- golang實現稀疏陣列Golang陣列
- 實驗九 類與物件(一) 程式片段程式設計題 5. 約瑟夫問題2020-12-12物件程式設計
- JS實現陣列去重JS陣列
- 如何實現陣列去重?陣列
- PHP 陣列底層實現PHP陣列
- JavaScript 中實現等分陣列JavaScript陣列
- 靜態佇列,迴圈陣列實現佇列陣列
- 正則實現陣列濾重陣列
- JS陣列去重的實現JS陣列
- PHP 實現按奇偶排序陣列PHP排序陣列
- NumPy迭代陣列的實現示例陣列
- 線性表1.0(陣列實現)陣列