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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

有 n 个人围成一圈,顺序排号。从第一个人开始报数(从 1 到 3 报数),凡报到 3 的人退出
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
圈子,直到只剩下一个人时停止报数,问剩下的人是原来的第几号悼
*        n 从键盘输入,但不能小于 20.

4 个回复

正序浏览
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
                        }
                }
               
                 }
         }
         }
}
回复 使用道具 举报
难在数字逻辑,当时我也用了半个小时才解决
回复 使用道具 举报
留位置等大神解答
回复 使用道具 举报
这个在官网java基础班的视频当中有,讲解很详细
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马