約瑟夫環(陣列實現)
有 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;
}
相關文章
- 約瑟夫環問題——初步瞭解+陣列實現陣列
- 陣列解決約瑟夫環問題陣列
- IOS 約瑟夫環遊戲的實現iOS遊戲
- 約瑟夫環 佇列+連結串列佇列
- 約瑟夫環遊戲遊戲
- 面試題—Java遞迴實現約瑟夫環面試題Java遞迴
- 用Python實現約瑟夫環演算法Python演算法
- C語言陣列實現約瑟夫環出圈問題 程式碼詳細註釋 簡單易懂C語言陣列
- 約瑟夫環(vector類解決)
- 約瑟夫(Josephus problem)環問題初探
- javascript中使用迴圈連結串列實現約瑟夫環問題JavaScript
- 連結串列面試題(八)---約瑟夫環面試題
- java環形連結串列約瑟夫環問題筆記Java筆記
- 迴圈連結串列(約瑟夫問題)--python實現Python
- 約瑟夫環(Josephus)問題--報數遊戲(連結串列)遊戲
- 約瑟夫問題pascal程式
- 約瑟夫出圈演算法演算法
- 約瑟夫環(超好的程式碼存檔)--19--約瑟夫環--LeetCode面試題62(圓圈最後剩下的數字)LeetCode面試題
- 資料結構實驗一:順序表的建立與操作實現、順序表實現約瑟夫環問題資料結構
- 使用陣列實現環形佇列Scala版本陣列佇列
- P1996 約瑟夫問題996
- Objective-C環境下的靜態陣列實現Object陣列
- 陣列排序的實現陣列排序
- golang實現稀疏陣列Golang陣列
- 牛客題霸NC132環形連結串列的約瑟夫問題Java題解Java
- JS實現陣列去重JS陣列
- PHP 陣列底層實現PHP陣列
- 如何實現陣列去重?陣列
- JavaScript 中實現等分陣列JavaScript陣列
- javascript 偽陣列實現方法JavaScript陣列
- 【筆記】oracle 陣列實現筆記Oracle陣列
- DELPHI也可以實現控制元件陣列,用定義陣列變數實現控制元件陣列 (轉)控制元件陣列變數
- 靜態佇列,迴圈陣列實現佇列陣列
- js利用指標操作約瑟夫問題程式碼例項JS指標
- 物件導向程式設計 約瑟夫問題簡要分析物件程式設計
- PHP 實現按奇偶排序陣列PHP排序陣列
- 正則實現陣列濾重陣列
- 線性表1.0(陣列實現)陣列