usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;namespace约瑟夫环问题
{public classJosephusring
{public static int nums { get; set; } = 41;public static int[] people = new int[nums];private static int outpeople = 3;static void Main(string[] args)
{
Console.WriteLine("约瑟夫环问题:\n"+ "据说著名犹太历史学家Josephus有过以下的故事:在罗马人占领乔塔帕特后,39个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。然而Josephus和他的朋友并不想遵从。他将朋友与自己安排在第16个与第31个位置,于是逃过了这场死亡游戏。");
Josephusring j= newJosephusring();
j.InitJosephusRing();
j.Printf_Ring();int left =nums;int counter = 0;int i = 0;while (true)
{if (people[i] > 0)
{
counter++;
}if (counter ==outpeople)
{
left--;
Console.WriteLine(people[i]+ "号出局了!\n\n");
Console.WriteLine("\n\n");
people[i]= 0;
counter= 0;
}if (people[i]!=0)
{
Console.WriteLine("当前总人数" + left + "\t" + "当前报数者:" + (i + 1) + "\n");
}
j.Printf_Ring();if (left <= 2)
{break;
}
i++;if (i ==nums)
{
i= 0;
}
}
Console.WriteLine("Gameover!!!");
}public voidInitJosephusRing()
{for (int i = 0; i < nums; i++)
{
people[i]= i + 1;
}
}public voidPrintf_Ring()
{for (int i = 0; i < nums; i++)
{
Console.Write("\t[" + people[i] + "]");
}
Console.WriteLine();
}
}
}