以顺序表求解约瑟夫环问题
有n个人围坐在一个圆桌周围,把这n个人依次编号为1,.....,n.从编号是s的人开始报数,直到第d个人离席,然后从离席的下一位开始重新开始报数,
数到d的人离席......如此反复,直到最后剩一个人在座位上为止。比如当n=3,s=1,d=2的时候,离席的顺序依次是2,4,1,5,最后留在座位上的是3号
`` internal class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello, World!");
JosephRing(5, 1, 2);
}
static void Show(ArrayList list)
{
foreach (var item in list)
{
Console.Write(item+" ");
}
Console.WriteLine();
}
static void JosephRing(int n,int s,int d)
{
ArrayList list = new ArrayList();
int i, j, k;
for ( i = 1; i <=n; i++)
{
list.Add(i);
}
Show(list);
i = s - 2;
k = n;
while (k > 1)
{
j = 0;
while (j<d)
{
j++;
i = (i + 1) % k;
}
Console.WriteLine("out: " + list[i]);
list.RemoveAt(i);
k--;i=(i-1) % k;
Show(list);
}
Console.WriteLine(list[0]);
}
}``

浙公网安备 33010602011771号