約瑟夫問題詳解

2021-06-12 05:45:41 字數 1020 閱讀 7093

約瑟夫問題記得是在學習c語言陣列的時候寫過的一道題目,至於什麼是約瑟夫問題我想大多數學過c的人都應該知道的,下面就來說下如何利用陣列解決約瑟夫問題。預設的約瑟夫問題是從第乙個人開始計數,並且留下最後乙個倖存者,筆者做的改進是可以從指定位置起始計數,並且可以留下指定的人數,並且可以檢視被踢出的人。

最開始要求輸入總人數,然後指定起始計數字置(預設從第乙個開始),剩餘人數(預設剩餘乙個人)。每乙個被踢出的位置都要做乙個標誌位(置為0),對下一次經過該位置來說可以直接跳過了。

#pragma once

#includeusing std::vector;//使用stl中的容器

class pro

;

#include"josephus_pro.h"

#includeusing namespace std;

pro::pro(int tol_num,int sg_num,int reman_num ,int bg_num)

pro::pro()//空的建構函式

{}pro::~pro()

{}void pro::running()

vec_int.push_back(arr[index]); //arr[index]為被踢出的

arr[index] = 0; //置為標誌位

index = (index + 1) % total_num; //此時索引要後移乙個

//後移後會出乙個問題,那就是不知道下乙個位置是否為標誌位,就無法確定i的重新計數值

if(arr[index] == 0)

i = 0; //如果被設定為標誌位

else

i = 1; //下乙個位置沒有被設定為標誌位

sum--; //一趟大迴圈會踢出乙個 }}

void pro::input()

void pro::putresult()

{ running();//核心演算法被封裝

cout<<"計算結果如下:"<::size_type i=0;i

約瑟夫問題詳解

name 約瑟夫環 模擬 author 李帥 date 10 11 08 23 53 description 約瑟夫問題 一群人圍成一圈,這群人共有 n個人,每個人身上都乙個value,依次給這圈人編號 1,2,n 一開始報數的上限值為m從第乙個人 編號 1 自一開始報數報到m時停止報數,報到m的人...

約瑟夫環問題詳解

講乙個比較有意思的故事 約瑟夫是猶太軍隊的乙個將軍,在反抗羅馬的起義中,他所率領的軍隊被擊潰,只剩下殘餘的部隊40餘人,他們都是寧死不屈的人,所以不願投降做叛徒。一群人表決說要死,所以用一種策略來先後殺死所有人。於是約瑟夫建議 每次由其他兩人一起殺死乙個人,而被殺的人的先後順序是由抽籤決定的,約瑟夫...

約瑟夫問題結合詳解

前端時間之前 大概有兩周了吧 我們進行了第一次acm賽制的模擬比賽 雖然最後總分爆零了但還是學到了很多東西滴 t1的題目為約瑟夫問題 我當時一看這個問題就感到十分狂喜,這t1果然是最簡單的肯定能切了呀!然而我還是沒有體會到社會的陰暗 題面要求是n個人數到m槍斃,然後要輸出最後的倖存者編號 資料範圍 ...