【算法】n个人围成一圈报数,报到3的退出,下面接着从1开始报,问最后剩下的是谁?

class Program
    {
        static void Main(string[] args)
        {
            List<int> array = new List<int>(600);
            for (int i = 1; i <= 600; i++)
            {
                array.Add(i);
            }
            var circleList = new CircleArrayList<int>(array);
            int num = 0;
            while (true)
            {
                if (circleList.Lengh == 1)
                {
                    break;
                }
                num += 1;
                if (num == 3)
                {
                    circleList.Remove();
                    num = 0;
                }
                else
                {
                    circleList.MoveNext();
                }
               
            }
            Console.WriteLine(circleList.Current);
            Console.ReadLine();
        }
    }

    public class CircleArrayList<T> : IEnumerator<T>
    {
        private List<T> interal;
        private int index = 0;

        public CircleArrayList(List<T> list)
        {
            this.interal = list;
        }

        public T Current
        {
            get { return interal[index]; }
        }

        public void Dispose()
        {
            return;
        }

        object System.Collections.IEnumerator.Current
        {
            get { return interal[index]; }
        }

        public bool MoveNext()
        {
            index += 1;
            if (index == interal.Count)
                index = 0;
            return true;
        }

        public void Reset()
        {
            index = 0;
        }
        public void Remove()
        {
            interal.RemoveAt(index);
            if (index == interal.Count)
                index = 0;
        }

        public int Lengh
        {
            get
            {
                return interal.Count;
            }
        }
    }
原文地址:https://www.cnblogs.com/end/p/2381519.html