- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace 约瑟夫杀人问题
- {
- class Program
- {
- static void Main(string[] args)
- {
- int[,] p=new int[15,3];
- int N=13,q=3;//N个人,喊道q的被杀死
-
- for (int i = 0; i < 13; i++)
- {
- p[i,0] = i - 1;
- p[i,1] = i;
- p[i,2] = i + 1;
- }
- p[0,0] = N - 1;
- p[N - 1,2] = 0;
- //链表的初始化
- int num= 0;//当前喊的人的编号
- for (int i = 1; i < 13; i++)
- {
- for (int j = 1; j < q; j++)
- {
- num = p[num,2];
- }
- p[p[num,0],2] = p[num,2];
- p[p[num,2],0] = p[num,0];
- num = p[num, 2];
- }
- //最后一个人就是活着的
- Console.WriteLine("The num is "+(num+1));
- Console.ReadKey();
- }
- }
- }
复制代码
由于现在在公司,就用C#写了一个模拟的双向链表的代码,回头用C再写一遍。这里的编号是从0开始的,最后的num需要+1,有什么错误请指教 |