数据结构--编程题

编程题1:有N个人围一圈依次报数,数到3的人出列,问当只剩一个人时他原来的位子在哪里?

// 转圈踢人游戏(约瑟夫环问题)

            /* 1、构建数组 */
            string[] persons = new string[10];                  

            Random random = new Random();

            for (int i = 0; i < persons.Length; i++)
            {
                persons[i] = String.Format("Person:{0}", random.Next(100));
            }


            int j = 0;          /* 记录成员报数值,用于踢人 */

            int count = 0;      /* 记录被踢人员数,用于判断踢人结束 */


            /* 2、开始转圈踢人 */
            for (int i = 0; i < persons.Length; i = (i + 1) % persons.Length)   /* i = (i + 1) % persons.Length 保证可以转圈,踢至最后一个人 */
            {
                 
                if (persons[i] != "")                   /* 不为空,表示需要验证是否需要被踢出 */
                {
                    j++;

                    if (j % 3 == 0)                     /* 表示报数为3的成员,进行踢出*/
                    {
                        persons[i] = "";                /* 踢出成功 */

                        count++;                        /* 被踢人数加1 */
                        //j = 0;
                        

                        if (count == persons.Length)    /* 最后一个被踢的人 */
                        {
                            Console.WriteLine("The last people is " + i);

                            break;
                        }
                    }
                }
            }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值