C# 小程序之新手练习(三)数组模拟约瑟夫环

来源:互联网 发布:改键位软件 编辑:程序博客网 时间:2024/05/17 04:04
//用数组模拟约瑟夫环using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace ConsoleApplication3{    class Program    {        /// <summary>        /// 返回约瑟夫环出列顺序的数组        /// </summary>        /// <param name="total">初始全部人数</param>        /// <param name="begin">开始编号</param>        /// <param name="dequeue">每多少个出列一个</param>        /// <returns></returns>        static int[] Josephus(int total, int begin, int dequeue)        {            int count =0,j;//count要输出的数组的下标            int[] iCounts = new int[total];//结果数组            int[] preCounts = new int[total];//初始数组            for (int i = 0; i < total; i++)//预处理初始数组            {                preCounts[i] = i;            }            for (int i = total-1; i >= 2;i-- )            {                begin = (begin + dequeue - 1) % i;//每次应该出列的编号                if (begin == 0)                {                    begin = i;                }                iCounts[count] = preCounts[begin];//将要出列的编号存入结果数组                count++;                for (j = begin+1; j <= i; j++)                {                    preCounts[j - 1] = preCounts[j];//一个人出列后,它后面往前移                }            }            iCounts[count] = preCounts[1];//最后一个出列的            return iCounts;//返回结果数组        }        /// <summary>        /// 主函数        /// </summary>        /// <param name="args"></param>        static void Main(string[] args)        {            int[] JosArray = Josephus(8,5,2);//共有8个人,从第5个开始,数到2的那个人出列            for (int i = 0; i < JosArray.Length - 1; i++)            {                Console.Write(JosArray[i] + " ");//输出出列顺序            }            Console.ReadLine();        }    }}

原创粉丝点击