第一種是最簡單的鍊錶實現方法
#include#include/*第一種是鍊錶法
首先建立乙個迴圈單鏈表
將每乙個參加該遊戲的人設定為乙個節點
每個節點的data域代表了每個人的編號
總共有n個人參加遊戲
當輪流報數到m的時候,該玩家出局 out
order代表了每個人的報數情況
在刪除節點方面,我選用帶頭節點迴圈單鏈表
引入兩個指標pre和q,當pre是q的前節點
每一次需要刪除q時,只需要動用pre即可
由於是兩個節點,所以當鍊表中只剩乙個節點
即p==q的時候,就是停止迴圈的條件
*/typedef
struct
nodenode,*pointer;
intmain()
tail->next=head->next;
pointer pre=tail;
pointer q=head->next;
int order=1
;
while(pre!=q)
else
}printf(
"\n the winner is %d\t
",pre->data);
}
第二種是數組成環實現
/*設定乙個參賽者陣列,陣列的名字為gamer
n,m設定與上面的鍊錶設定一樣
number代表參賽者的人數
pos代表當前報數者的位置
當報數者的報數為3時,將其out,然後其陣列置為0
為了使陣列形成環,就需要用到佇列中學到的知識
使用pos=(pos+1)%n
當pos==n-1的時候(陣列的最後一位)
pos+1會變到的陣列的第一位,從而形成閉環 */
intmain()
else
}else
//如果數值為0,則跳過當前元素
pos=(pos+1)%n;
}for(int i=0;i<41;i++)
if(gamer[i]!=0
) printf(
"winner is %d\n
",gamer[i]);
}
C語言約瑟夫環的實現
c語言約瑟夫環的實現 一 典故 據說著名猶太歷史學家 josephus有過以下的故事 在羅馬人占領喬塔帕特後,39 個猶太人與josephus及他的朋友躲到乙個洞中,39個猶太人決定寧願死也不要被敵人抓到,於是商量了乙個自殺方式 41個人排成乙個圓圈,由第1個人 開始報數,每數到第3人該人就必須自殺...
C語言 實現約瑟夫環
鏈式解法 include include typedef struct sqlist sqlist 建立解約瑟夫環需要的鍊錶,該鍊錶不帶頭節點 sqlist creatlist int length p next null 普通鍊錶轉不帶頭結點的迴圈鍊錶,就是將頭指標下移到第乙個節點位置 原來的頭結...
C語言實現約瑟夫環
直接上 define crt secure no warnings include includetypedef struct listnode listnode void create listnode firstnode,int m 建立單向迴圈鍊錶 int i listnode pre fir...