30选15小小程序

15个日本人和15个美国人放在一起,数到9就踢出一个日本人,最后只剩15个美国人的算法
=================
class Program
    {
        static void Main(string[] args)
        {
            //一开始有30个人
            int[] list = new int[30];
            //初始化每个人的原始位置
            for(int i = 0 ;i<30;i++)
            {
                list[i] = i;
            }
            // round_count 记录每次还剩下多少人 第一次 30人
            int round_count = 30;
            //记录最后一次是在哪个位置开始数
            int last_index = 0;
            for (int i = 0; i < 15; i++)
            {
                //更新队列人数
                round_count = 30 - i;
                //更新初始位置
                last_index = (last_index + 8) % round_count;
                //踢出日本人后 所有未被踢的人位置前移
                for (int k = last_index; k < round_count - 1; k++)
                {
                    //移动后改变初始索引
                    list[k] = list[k + 1];
                }
            }
            //输出
            for (int i = 0; i < 15; i++)
            {
                Console.WriteLine(list[i]);
            }
            Console.ReadKey();
        }
posted @ 2009-10-31 14:38  sunmotion  阅读(191)  评论(0)    收藏  举报