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());
}
}