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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SERVICE問題解決方法
- As常見問題解決方法
- 解決問題通用方法論
- 遇到問題的解決方法
- but no encoding declared;問題的解決方法Encoding
- css高度塌陷問題解決方法CSS
- pyinstaller閃退問題解決方法
- AWS AutoScaling的一個ScaleDown策略問題以及解決方法
- 關於input的一些問題解決方法分享
- 快取穿透問題與解決方法快取穿透
- Nacos 常見問題及解決方法
- java中亂碼問題解決方法Java
- dedecms 後臺假死問題解決方法
- 問卷調查中常見問題及解決方法
- archlinux下wps顯示問題解決方法Linux
- 解決 Sorry,this Adobe app is not available 問題的方法APPAI
- Nuxt使用axios跨域問題解決方法UXiOS跨域
- vue中常見的問題以及解決方法Vue
- 約瑟夫環(Josephus)問題--報數遊戲(連結串列)遊戲
- SQL隱碼攻擊問題以及解決方法SQL
- mysql登入遇到ERROR 1045問題解決方法MySqlError
- 【IDL】IDL中亂碼問題的解決方法
- mysql使用source 命令亂碼問題解決方法MySql
- Docker啟動故障問題 no such file or directory解決方法Docker
- 解決代理超時問題的三種方法
- JS中toFixed()方法的問題及解決方案JS
- 解決ajax跨域問題的多種方法跨域
- Python執行緒安全問題及解決方法Python執行緒
- CentOS 搭建FTP伺服器(530 Login incorrect問題解決方法之一)CentOSFTP伺服器
- vue渲染時閃爍{{}}的問題及解決方法Vue
- 部署專案遇到的mysql問題以及解決方法MySql
- 解決Spring Boot測試方法Failed to load ApplicationContext問題Spring BootAIAPPContext
- vue-cli下跨域 問題的解決方法Vue跨域
- Mysql mysql lost connection to server during query 問題解決方法MySqlServer
- 交叉編譯庫依賴問題的解決方法編譯
- mysql的ERROR 1231 (42000)問題原因及解決方法MySqlError
- Windows共享資料夾常見問題解決方法Windows
- Android SELinux avc dennied許可權問題解決方法AndroidLinux
- 安裝mysql資料庫及問題解決方法MySql資料庫