约瑟夫环
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()); } }