黑马程序员技术交流社区

标题: 求教这个题怎么解,不会处理循环1,2,3报数 [打印本页]

作者: rimfwfn    时间: 2017-9-2 13:38
标题: 求教这个题怎么解,不会处理循环1,2,3报数
有 n 个人围成一圈,顺序排号。从第一个人开始报数(从 1 到 3 报数),凡报到 3 的人退出
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
圈子,直到只剩下一个人时停止报数,问剩下的人是原来的第几号悼
*        n 从键盘输入,但不能小于 20.
作者: Oliverwqcwrw    时间: 2017-9-4 09:36
这个在官网java基础班的视频当中有,讲解很详细
作者: 仙锄    时间: 2017-11-27 00:35
留位置等大神解答
作者: sunyiran    时间: 2017-12-3 15:36
难在数字逻辑,当时我也用了半个小时才解决
作者: sunyiran    时间: 2017-12-3 17:41
public class T1 {
         public static void main(String[] args) {
                System.out.println(T1.getLast(2));
        }
         
         //定义解决方案
         public static int getLast(int n) {
                 
                 int arr[] = new int[n];//将n个人的当前状态存入数组,0为存在(默认),1为退出

                 int count = 0;//当前计数
                 int sum = 0;//当前退出人数
                 while(true) {
                         
                 for (int i = 0; i < arr.length; i++) {
                         
                        if(arr[i] == 0) {//如果当前对象存在,则进行报数
                                if((n-sum) == 1)
                                         return i+1;//只剩下1人时,退出方法,并返回当前对象的号数
                        if(count < 2) {
                                count++;        //如果报数小于3,则计数加1
                        }else{
                                count = 0;//如果报数为3,则重新计数
                                arr[i] = 1; //同时设定当前对象退出
                                sum++;//退出人数加1
                        }
                }
               
                 }
         }
         }
}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2