上次看了个贴 很有意思 不记得怎么写了 就是
N个人报数 数到3的时候那个人就出围 以次类推一直到喊完
有人还记得写吗??

解决方案 »

  1.   

    用Queue<>,报完数的Dequeue(),如果不是3就Enqueue(),排进队列末尾。这样循环直到最后一个。
      

  2.   


    class main
    {
        static void Main()
        {
            const int size = 100;
            int flag = 0;
            int[] intArray = new int[size];
            for (int i = 0; i < size; i++)
            {
                intArray[i] = i + 1;
            }
            LinkedList<int> ll = new LinkedList<int>(intArray);
             NextNode(ll.First, flag);
        }
        static void NextNode(LinkedListNode<int> ln, int flag)
        {
            if (ln != null)
            {
                if (ln.List.Count > 2)
                {
                    ++flag;
                    if (ln.Next == null)
                      {
                        LinkedListNode<int> lln = ln.List.First;
                           if (flag == 2)
                        {
                            Console.Write(ln.Value + " (" + ln.List.First.Value + "-out) ");
                               lln = ln.List.First.Next;
                               ln.List.Remove(ln.List.First);
                               flag = 0;
                            NextNode(lln, flag);
                           }
                        else
                        {
                            Console.Write(ln.Value + " ");
                            NextNode(lln, flag);
                        }
                    }
                    else
                    {
                        if (flag == 2)
                        {
                            Console.Write(ln.Value + " (" + ln.Next.Value + "-out) ");
                            ln.List.Remove(ln.Next);
                            flag = 0;
                            NextNode(ln.Next, flag);
                        }
                        else
                        {
                            Console.Write(ln.Value + " ");
                            NextNode(ln.Next, flag);
                        }
                    }
                }
            }
        }
    }
      

  3.   

    原来的帖子在这里:
    http://topic.csdn.net/u/20080115/22/ab03ef9f-d785-41c3-9d83-da6cead94356.html        static void Main(string[] args)
            {
                int n = 50;
                int m = 3;
                Console.WriteLine(GetOneBasedIndex(n, m));
                Console.ReadLine();
            }        static int GetOneBasedIndex(int n, int m)
            {
                return GetZeroBasedIndex(n, m, 0) + 1;
            }        //核心代码就这个方法
            static int GetZeroBasedIndex(int n, int m, int offset)
            {
                if (n == 1)
                    return 0;
                int index = GetZeroBasedIndex(n - (n + offset) / m, m, (n + offset) % m);
                return index + (index + offset) / (m - 1);
            }
    可以改版成Long型计算n超过int最大值,m不能太大,否则堆栈溢出