C#算法之約瑟夫環(huán)算法淺析
在C#算法的學(xué)習(xí)中碰到了C#約瑟夫環(huán)算法,那么約瑟夫環(huán)算法是什么呢?,首先我們來看看約瑟夫環(huán)問題描述:
設(shè)有n個(gè)人圍坐一圈,現(xiàn)以某個(gè)人開始報(bào)數(shù),數(shù)到m的人出列,接著從出列的下一個(gè)人開始重新報(bào)數(shù),數(shù)到m的人又出列,如此下去,直到所有人都出列為止.按出列順序輸出.
下面就是C#算法之約瑟夫環(huán)算法的實(shí)現(xiàn)程序:
- public class Josephas
- //從第start人開始計(jì)數(shù),以alter為單位循環(huán)記數(shù)出列,總?cè)藬?shù)為total
- public int [ ] Jose(int total, int alter, int start)
- {
- int i, j, k = 0;
- //count數(shù)組存儲按出列順序的數(shù)據(jù),以當(dāng)結(jié)果返回
- int[] count = new int [ total+1];
- //s數(shù)組存儲初始數(shù)據(jù)
- int[] s = new int [ total+1];
- //對數(shù)組s賦初值,第一個(gè)人序號為0,第二人為1,依此下去
- for (i = 0; i <total; i++)
- {
- s[i] = i;
- }
- //按出列次序依次存于數(shù)組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];
- //結(jié)果返回
- return count;
- }
- }
以上程序在Microsoft Visual Studio .NET 2003 和Visual C# 2005 Express Edition Beta1中均調(diào)試通過.
C#約瑟夫環(huán)算法的基本情況就向你介紹到這里,希望通過介紹C#約瑟夫環(huán)算法使你對C#算法有一定的了解。
【編輯推薦】