本文實例講述了C#約瑟夫問題解決方法。分享給大家供大家參考。具體分析如下:
決約瑟夫問題描述如下:
設有n個人圍坐一圈,現以某個人開始報數,數到m的人出列,接著從出列的下一個人開始重新報數,數到m的人又出列,如此下去,直到所有人都出列為止.按出列順序輸出.
public class Josephas //從第start人開始計數,以alter為單位循環記數出列,總人數為total public int [ ] Jose(int total, int alter, int start) { int i, j, k = 0; //count數組存儲按出列順序的數據,以當結果返回 int[] count = new int [ total+1]; //s數組存儲初始數據 int[] s = new int [ total+1]; //對數組s賦初值,第一個人序號為0,第二人為1,依此下去 for (i = 0; i <total; i++) { s[i] = i; } //按出列次序依次存于數組count中 for (i = total; i >= 2; i--) { start = (start + alter - 1) % i; if (start == 0) start = i; count[k] = s[start]; k++; for (j = start + 1; j <= i; j++) s[j - 1] = s[j]; } count[k]=s[1]; //結果返回 return count; } }
希望本文所述對大家的C#程序設計有所幫助。
新聞熱點
疑難解答