約瑟夫問題詳解

2021-04-23 02:40:06 字數 1302 閱讀 8658

/*

name:   約瑟夫環 模擬

author: 李帥

date: 10-11-08 23:53

description: 

約瑟夫問題: 一群人圍成一圈,這群人共有 n個人,每個人身上都乙個value,依次給這圈人編號:

1,2,n 一開始報數的上限值為m從第乙個人(編號:1)自一開始報數報到m時停止報數,報到m的人出列,

將他的密碼做為新的m值,從他的順時針方向開始的下個人開始從新從一報數,如此下去,直至所有的人出列為止。 

這裡輸出出列順序 

*/#include 

using

namespace std;

//定義節點結構

typedef

struct node

node;

//定義總人數

int n;

//開始位置指標

node *firstnode = null;

//建立第乙個迴圈鍊錶,先建立乙個,後面有用

void createfirst(int);

//刪除節點p後面的節點

void deletenode(node*);

int main()

node *p = firstnode;

//*****===鍊錶建立結束*************************==

//**********開始模擬執行********************=

current = firstnode;

node *tem = current->next;

node *previous = tem;

//把previous 放在tem前面

while(tem!=current)

int m;

cout << "輸入給定的m值:";

cin >> m;

i = 1;

int count = n;

//模擬整個過程

while(i <= m)

if(i==m)//已迴圈m次,即數過m個人後

i++;

previous = current;

current = current->next;

}system("pause");    

return 0;

} void createfirst(int va) 

//刪除節點p後面的節點,之所以不刪除當前節點,是因為如果刪除當前節點,就不方便將當前節點前後節點連線起來

void deletenode(node *p)

約瑟夫問題詳解

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

約瑟夫環問題詳解

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

約瑟夫問題結合詳解

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