A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© lighter 中级黑马   /  2014-11-4 13:51  /  1059 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

经典例子:500个小孩围成一圈,从第一个开始报数:1,2,3,1,2,3,1,2,3……每次报3的小孩退出,问最后剩下的那个小孩是原来500个小孩中的第几个?
解法:
                int n=500,m=3,index=0;
                for(int i=2;i<=n;i++){
                        index=(index+m)%i;
                }
                System.out.println(index+1);
我的大概理解是:
        总人数为n-1时从第1个开始数剩下的是第s个,总人数增加到n个人(增加1个人到最后):
        从第n+(1-3)的位置数,增加的那个人第一个循环就退出了,剩下的还是总人数n-1时剩下的那个人,
        开始数的位置提前3个人,即从第1个人开始数的话,最后剩下的是第s+3个人

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马