約瑟夫環(約瑟夫問題) 採用迴圈單鏈表實現

2021-08-10 08:14:06 字數 1021 閱讀 1423

// yuesefuwenti.cpp : 定義控制台應用程式的入口點。

/*約瑟夫環(約瑟夫問題)是乙個數學的應用問題:

已知n個人(以編號1,2,3...n分別表示)圍坐在一張圓桌周圍。

從編號為k的人開始報數,數到m的那個人出列;他的下乙個人又從1開始報數,

數到m的那個人又出列;依此規律重複下去,直到圓桌周圍的人全部出列。

通常解決這類問題時我們把編號從0~n-1,最後結果+1即為原問題的解。

*///

#include "stdafx.h"

#include

#include "stdlib.h"

using namespace std;

typedef struct node

node;

/*建立迴圈單鏈表

日期:2023年11月4日

*/node * create(int n)

else

pret = p_node;

while (n_idx

p_node->data = n;

p_node->next = pret;

}return pret;

}int main()

printf("%d  ", piter->next->data);

//刪除選擇到的節點

piter->next = piter->next->next;

piter = piter->next;

}printf("%d\n", piter->data);

deleteplist;

//推理,有點叼 至於數學推理,請看如下文章,說的很清楚

//    

int last = 0; // f(1) = 0

for (int i = 2; i <= n; ++i)

cout << "the last one is : " << last + 1 << endl;

system("pause");

return 0;

}

採用迴圈單鏈表實現約瑟夫環

演算法的基本思想 利用鍊錶和陣列,約瑟夫環問題中的資料時人所在的位置,而這個資料時存在 第一元素 最後元素 並且 存在唯一的前驅和後繼,符合線性表的特點,由於需要模擬約瑟夫環的出列問題,可以採用順序表來實現 線性表,完成出列順序的輸出,核心演算法主要分兩步 1 確定需要刪除的位置 2 設定並刪除該位...

迴圈單鏈表 Joseph約瑟夫環問題

package com.linkedlist author qw date 2020 8 11 22 02 public class josephcircle 迴圈單鏈表 class circlesinglelinkedlist child cur null 輔助指標,幫助構建迴圈鍊錶 for in...

約瑟夫問題 約瑟夫環

約瑟夫 問題 有時也稱為約瑟夫斯置換,是乙個出現在電腦科學和數學中的問題。在計算機程式設計的演算法中,類似問題又稱為約瑟夫環。又稱 丟手絹問題 據說著名猶太歷史學家 josephus有過以下的故事 在羅馬人占領喬塔帕特後,39 個猶太人與josephus及他的朋友躲到乙個洞中,39個猶太人決定寧願死...