约瑟夫环

  static void Main(string[] args)
        {
            Joseph1(41, 3);
            Console.Read();
        }
        
        /// <summary>
        /// 约瑟夫环
        /// </summary>
        /// <param name="count">总数</param>
        /// <param name="doom"></param>
        static void Joseph(int count, int doom)
        {
            LinkedList<int> list = new LinkedList<int>();
            for (var i = 1; i <= count; i++)
            {
                list.AddLast(i);
            }
            var num = 1;
            var index = 0;
            var node = list.First;
            while (list.Count >= doom)
            {
                num++;
                node = node.Next;
                if (node == null) node = list.First;
                if (num == doom)
                {
                    num = 1;
                    Console.WriteLine("第{0}次kill        {1} ", ++index, node.Value);
                    var temp = node.Next;
                    if (temp == null) temp = list.First;
                    list.Remove(node);
                    node = temp;
                }
            }
            foreach (var key in list)
            {
                Console.WriteLine("剩下{0} ", key);
            }
        }

        /// <summary>
        /// 约瑟夫环
        /// </summary>
        /// <param name="count">总数</param>
        /// <param name="doom"></param>
        static void Joseph1(int count, int doom)
        {
            Queue<int> queue = new Queue<int>();
            for (var i = 1; i <= count; i++)
            {
                queue.Enqueue(i);
            }

            int num = 1;
            var index = 0;
            while (queue.Count >= doom)
            {
                if (num == doom)
                {
                    Console.WriteLine("第{0}次kill        {1} ", ++index, queue.Dequeue());
                    num = 1;
                }
                else
                {
                    queue.Enqueue(queue.Dequeue());
                    num++;
                }
            }
            while (queue.Count > 0)
            {
                Console.WriteLine("剩下{0} ", queue.Dequeue());
            }
        }

 

posted @ 2020-09-24 19:30  江境纣州  阅读(36)  评论(0编辑  收藏  举报