Josephus問題解決方法一
關於該問題簡單描述:假設有n個人排成一個圈。從第一個人開始報數,數到第m個人的時候這個人從佇列裡出列。然後繼續在環裡數後面第m個人,讓其出列直到所有人都出列。最後一個出列的是勝出者。下面用連結串列模擬n個同學手拉手圍成一個圈。如果m為1的話,該遊戲沒有了意思,因為這樣的話,第n個人一定是勝出者,所以排除這種情況。解決該問題,有很多方法,本方法用的是迴圈單連結串列。如有不當之處,請讀者指正!
點選(此處)摺疊或開啟
-
#include<iostream>
-
//#include<stdlib.h>
-
using namespace std;
-
-
struct Note {
-
-
int data;
-
struct Note *next;
-
-
};
-
-
Note *CreateNote() {
-
-
Note *first;
-
first = new Note; //first = (Note *)malloc(sizeof(Note));
- first ->data = NULL; //建立頭結點,並且不存放任何值
-
return first;
-
}
-
-
Note *InitNote(Note *first, int n) {
-
-
Note *head, *p;
-
head = first;
-
-
p = NULL;
-
-
cout << "同學開始座次:" << endl;
-
-
for (int i = 1; i <= n; i++) { //利用尾插法,構造連結串列
-
-
p = new Note;
-
head->next = p;
-
p->data = i;
-
cout << p->data << "--> ";
-
head = p;
-
}
-
-
p->next = first->next; //形成換
-
return first; //返回頭結點
-
}
-
-
void Search(Note *q, int m) {
-
-
cout << "依次出列同學:";
-
if (m == 1) { //如何查詢間隔為1,則終止程式
-
-
cout << "遊戲太無聊!";
-
exit(-1);
-
}
-
-
for (int i = 1; q != q->next; q = q->next, i++) {
-
-
if (i == m) { //當i = m時,執行其中的語句,並初始化i = 1,至於原因,讀者畫圖便可知
-
-
i = 1;
-
Note *n;
-
n = q->next;
-
cout << q->next->data << "--> ";
-
q->next = n->next;
-
delete n;
-
-
}
-
}
-
-
cout << q->data;
-
cout << endl;
-
cout << "獲勝的是:" << q->data << "號同學" << endl;
-
-
}
-
int main() {
-
-
Note *p, *q;
-
p = CreateNote();
-
q = InitNote(p, 5);
-
cout << endl;
-
Search(q, 2);
- }
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29876893/viewspace-1815055/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Josephus問題解決方法二
- Josephus問題解決方法五(遞迴)遞迴
- Josephus問題解決方法四(迴圈陣列)陣列
- Josephus問題解決方法三(單向迴圈連結串列標識法)
- 約瑟夫(Josephus problem)環問題初探
- SERVICE問題解決方法
- 解決問題通用方法論
- As常見問題解決方法
- 遇到問題的解決方法
- "undefined reference to" 問題解決方法Undefined
- 問題解決方法有三
- css高度塌陷問題解決方法CSS
- **PHPNotice:Undefinedindex:…問題的解決方法PHPUndefinedIndex
- windows xp共享問題解決方法Windows
- MYSQL亂碼問題解決方法MySql
- 解決問題的方法和途徑-問題管理
- 解決「問題」,不要解決問題
- 關於input的一些問題解決方法分享
- java中亂碼問題解決方法Java
- Nacos 常見問題及解決方法
- dedecms 後臺假死問題解決方法
- 快取穿透問題與解決方法快取穿透
- pyinstaller閃退問題解決方法
- 今天遇到的問題與解決方法
- 用簡單的方法解決問題
- Oracle問題解決方法ORA-0Oracle
- ssh登入慢問題解決方法
- Tomcat埠占用問題解決方法Tomcat
- 解決Can not allocate log問題的方法
- but no encoding declared;問題的解決方法Encoding
- 約瑟夫環(Josephus)問題--報數遊戲(連結串列)遊戲
- TSM故障問題解決一則
- 問卷調查中常見問題及解決方法
- vue中常見的問題以及解決方法Vue
- Win7 - 遊戲全屏問題解決方法Win7遊戲
- IMP-00013 問題及解決方法
- Hadoop常見問題及解決方法Hadoop
- KMP常見問題及解決方法【Z】KMP