/*
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槍斃,然後要輸出最後的倖存者編號 資料範圍 ...