zoukankan      html  css  js  c++  java
  • 【算法】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;
                }
            }
        }
  • 相关阅读:
    VS2010 自动跳过代码现象
    Reverse Linked List II 【纠结逆序!!!】
    Intersection of Two Linked Lists
    Linked List Cycle II
    Remove Nth Node From End of List 【另一个技巧,指针的指针】
    Swap Nodes in Pairs
    Merge Two Sorted Lists
    Remove Duplicates from Sorted List
    Linked List Cycle
    Dungeon Game
  • 原文地址:https://www.cnblogs.com/end/p/2381519.html
Copyright © 2011-2022 走看看