约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。通常解决这类问题时我们把编号从0~n-1,最后 [1] 结果+1即为原问题的解。
上代码:
/// <summary>
/// 約瑟夫環問題
/// </summary>
class YuSheFuHuanWenTIi
{
public static void Find(List<int> list, int k, int m)
{
if (list.Count > 0 && k <= list.Count)
{
int index = 0;
while (index != m)
{
index++;
if (k == list.Count)
{
k = 0;
}
k++;
if (k == list.Count)
{
k = 0;
}
if (index == m)
{
if (list.Count == 1)
{
Console.WriteLine(list[k]);
}
Console.WriteLine(list[k]);
list.RemoveAt(k);
index = m;
YuSheFuHuanWenTIi.Find(list, k, m);
}
}
}
}
}