問題描述:
編號是1,2,……,n的n個人按照順時針方向圍坐一圈,每個人只有乙個密碼(正整數)。一開始任選乙個正整數作為報數上限值m,從第乙個仍開始順時針方向自1開始順序報數,報到m時停止報數。報m的人出列,將他的密碼作為新的m值,從他在順時針方向的下乙個人開始重新從1報數,如此下去,直到所有人全部出列為止。設計乙個程式來求出出列順序。
演算法設計與分析
可用陣列來解決這個約瑟夫環問題,即從第1開始數,從陣列下標為0開始,移動陣列下標,當數到m時,輸出此時的陣列元素下標,並且將此陣列元素賦值為0,當數到陣列的最後乙個元素後,繼續從陣列下標為0處接下去,讓陣列形成乙個迴圈,當判斷到某個陣列元素為0時,不計數,直到下乙個陣列元素不為0。
#include
intmain()
++j;
if(j>=n)
j=0;
//形成迴圈
if(a[j]!=0
)++i;
}return0;
}
執行結果:
約瑟夫環問題(C語言)
n個人站成一圈,每個人有不同的編號i,從編號為1的人開始順時針防線迴圈報數,數到m的人出列。然後從出列者的下乙個人重新報數,如此重複,直到全部出列。輸出n個人的出列順序。元素位置標記為0,1,2,n 1。設t為輸出元素位置,初始值0,則輸出元素位置為t t m 1 n t位置後的元素後移,列表元素個...
約瑟夫環問題(C語言)
問題描述 n個人站成一圈,每個人有不同的編號i,從編號為1的人開始順時針防線迴圈報數,數到m的人出列。然後從出列者的下乙個人重新報數,如此重複,直到全部出列。輸出n個人的出列順序。思路 元素位置標記為0,1,2,n 1。設t為輸出元素位置,初始值0,則輸出元素位置為t t m 1 n t位置後的元素...
約瑟夫環 C語言
約瑟夫 joseph 問題的一種描述是 編號為1,2,3,n的n個人按順時針方向圍坐一圈。每人持有乙個密碼 正整數 一開始任選乙個正整數作為報數上限值m,從第乙個人開始按順時針方向自1開始順序報數,報到m時停止報數,令其出列,將他的密碼作為新的m值,從他在順時針方向上的下乙個人開始重新報數,如此下去...