Josephus問題解決方法二
前面文章寫了關於Josephus問題解決的一種方法http://blog.itpub.net/29876893/viewspace-1815055/,但是由於前面的程式有兩處錯誤已改正(紅色字型),由於本人寫文章時太粗心!導致執行結果錯誤,下面修正:(原文已經修正,下面指出已對自己粗心的教訓)
我認為該問題難點在於構造單向迴圈連結串列和對連結串列結點的刪除(如何判斷刪除間隔),下面給出另一種構造單向迴圈連結串列的方法:
關於構造單向迴圈連結串列,畫出圖後,會變的簡單些,下面簡單給出上面的構造迴圈單連結串列的示意圖(圖畫的不是太美觀~_~):
點選(此處)摺疊或開啟
-
...
-
...
-
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) {
-
-
...
-
-
for (int i = 1; q != q->next; q = q->next, i++) {
-
-
if (i == m) { //當i = m時,執行其中的語句,並初始化i = 1,至於原因,讀者畫圖便可知
-
-
....
-
-
}
-
}
-
...
-
}
-
int main() {
-
...
-
}
-
點選(此處)摺疊或開啟
-
#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;
-
first->next = new Note;
-
return first;
-
}
-
-
void InitNote(Note *first, int n) {
-
-
Note *p;
-
p = first;
-
-
cout << "同學開始座次:" << endl;
-
-
for (int i = 1; i <= n; i++) {
-
-
p->next = new Note;
-
p = p->next;
-
p->data = i;
-
cout << p->data << "-->";
-
-
}
-
-
p->next = first->next;
-
-
}
-
-
void Search(Note *first, int m) {
-
-
cout << "依次出列同學:";
-
if (m == 1) {
-
-
cout << "遊戲太無聊!";
-
exit(-1);
-
}
-
int i;
-
Note *q;
-
for (i=1,q = first; q != q->next; q = q->next,i++) {
-
-
if (i == m) {
-
-
i = 1;
-
Note *n;
-
n = q->next;
-
cout<<n->data << "-->";
-
q->next = n->next;
-
delete n;
-
-
}
-
}
-
-
cout << q->data;
-
cout << endl;
-
cout << "獲勝的是:" << q->data << "號同學" << endl;
-
-
}
-
int main() {
-
-
Note *p;
-
p = CreateNote();
-
InitNote(p, 5);
-
cout << endl;
-
Search(p, 2);
-
}
-
-
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29876893/viewspace-1850077/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SERVICE問題解決方法
- As常見問題解決方法
- 解決問題通用方法論
- 遇到問題的解決方法
- Spring ApplicationListener使用方法及二次呼叫問題解決SpringAPP
- but no encoding declared;問題的解決方法Encoding
- css高度塌陷問題解決方法CSS
- pyinstaller閃退問題解決方法
- 快取穿透問題與解決方法快取穿透
- Nacos 常見問題及解決方法
- java中亂碼問題解決方法Java
- dedecms 後臺假死問題解決方法
- 二進位制方式解決 power 問題
- ES系列二之常見問題解決
- 問卷調查中常見問題及解決方法
- 校園二手交易平臺系統問題以及解決方法
- 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執行緒
- 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