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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Josephus問題解決方法一
- Josephus問題解決方法五(遞迴)遞迴
- Josephus問題解決方法四(迴圈陣列)陣列
- Josephus問題解決方法三(單向迴圈連結串列標識法)
- 約瑟夫(Josephus problem)環問題初探
- SERVICE問題解決方法
- C++二進位制相容問題及解決方法C++
- 解決問題通用方法論
- As常見問題解決方法
- 遇到問題的解決方法
- "undefined reference to" 問題解決方法Undefined
- 問題解決方法有三
- css高度塌陷問題解決方法CSS
- **PHPNotice:Undefinedindex:…問題的解決方法PHPUndefinedIndex
- windows xp共享問題解決方法Windows
- MYSQL亂碼問題解決方法MySql
- 解決問題的方法和途徑-問題管理
- 解決「問題」,不要解決問題
- java中亂碼問題解決方法Java
- Nacos 常見問題及解決方法
- dedecms 後臺假死問題解決方法
- 快取穿透問題與解決方法快取穿透
- pyinstaller閃退問題解決方法
- 今天遇到的問題與解決方法
- 用簡單的方法解決問題
- Oracle問題解決方法ORA-0Oracle
- ssh登入慢問題解決方法
- Tomcat埠占用問題解決方法Tomcat
- 解決Can not allocate log問題的方法
- but no encoding declared;問題的解決方法Encoding
- Spring ApplicationListener使用方法及二次呼叫問題解決SpringAPP
- 二進位制方式解決 power 問題
- ES系列二之常見問題解決
- oracle ORA-00824 問題解決 (二)Oracle
- 約瑟夫環(Josephus)問題--報數遊戲(連結串列)遊戲
- 問卷調查中常見問題及解決方法
- RAC安裝配置和使用過程的問題解決方法總結二
- 校園二手交易平臺系統問題以及解決方法