約瑟夫環 C語言

2021-09-05 10:31:35 字數 1235 閱讀 3917

約瑟夫(joseph)問題的一種描述是:編號為1,2,3,…,n的n個人按順時針方向圍坐一圈。每人持有乙個密碼(正整數)。一開始任選乙個正整數作為報數上限值m,從第乙個人開始按順時針方向自1開始順序報數,報到m時停止報數,令其出列,將他的密碼作為新的m值,從他在順時針方向上的下乙個人開始重新報數,如此下去,直到所有人全部出列為止。

試設計乙個程式求出出列順序。

測試資料:m的初值為20;n=7,7個人的密碼依次為:3,1,7,2,4,8,4(對應於節點的密碼),首先m值為20,則正確的出列順序應為6,1,4,7,2,3,5(對應於節點的編號)

在設計程式時要特別注意第乙個插入的節點和最後乙個刪除的節點的處理;還有就是密碼為1的節點出列後的下乙個節點的處理(因為密碼為1的節點出列後下乙個出列的節點即為該節點出列之前的下乙個節點)。

**:

#include

#include

typedef

struct josecyclenode

josecyclenode;

//鍊錶結構體

//建立約瑟夫環

josecyclenode *

createlinklist

(int num)

else

last = p;

i ++;}

last = last->next;

//將指標指向第乙個插入的節點

return last;

}//按照刪除節點的順序輸出節點編號

void

putnum

(josecyclenode *list,

int pwd)

list = p;

p = p->next;

pwd = p->pwd;

list->next = p->next;

printf

("%d "

,p->num)

;free

(p);

if(pwd ==1)

else

}printf

("%d\n"

,p->num)

;//輸出最後乙個節點的節點編號

free

(p);

//刪除最後乙個節點

}int

main()

這個是當時上大學時沒有實現的**,好像當時沒有處理好只有乙個節點的情況。今天突然想到了就寫了一下,用的時間不算很少,但也還好~堅持下去吧~自己會越來越強大的!

C語言約瑟夫環鏈表

include include include struct link creat1 int n void out struct link head void free struct link head struct link jsf struct link head,int m struct li...

約瑟夫環問題(C語言)

n個人站成一圈,每個人有不同的編號i,從編號為1的人開始順時針防線迴圈報數,數到m的人出列。然後從出列者的下乙個人重新報數,如此重複,直到全部出列。輸出n個人的出列順序。元素位置標記為0,1,2,n 1。設t為輸出元素位置,初始值0,則輸出元素位置為t t m 1 n t位置後的元素後移,列表元素個...

約瑟夫環 C語言解析

約瑟夫環 在我們c語言的初學基礎中,會遇到魔方陣,做遊戲踢出 佇列。都要用到迴圈陣列。魔方陣之前有講解,今天只說做遊戲踢出佇列。這類問題有很多說法。現在我們說做遊戲退出 有n個人,在一起做遊戲,由第乙個人從1開始數,數到m,第m個人退出。接著m的下乙個人從1開始數,數到m,第m個人退出。如果說數了第...