以顺序表求解约瑟夫环问题

有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]);
  }

}``

posted @ 2025-03-17 15:53  晨冬之雪  阅读(11)  评论(0)    收藏  举报
百度