在C#算法的学习中碰到了C#约瑟夫环算法,那么约瑟夫环算法是什么呢?,首先我们来看看约瑟夫环问题描述:
设有n个人围坐一圈,现以某个人开始报数,数到m的人出列,接着从出列的下一个人开始重新报数,数到m的人又出列,如此下去,直到所有人都出列为止.按出列顺序输出.
下面就是C#算法之约瑟夫环算法的实现程序:
- 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;
- }
- }
以上程序在Microsoft Visual Studio .NET 2003 和Visual C# 2005 Express Edition Beta1中均调试通过.
C#约瑟夫环算法的基本情况就向你介绍到这里,希望通过介绍C#约瑟夫环算法使你对C#算法有一定的了解。
【编辑推荐】