小詹37


私信TA

用户名:dotcpp0708087

访问量:152

签 名:

等  级
排  名 20727
经  验 649
参赛次数 0
文章发表 3
年  龄 0
在职情况 学生
学  校 江西科技学院
专  业

  自我简介:

TA的其他文章

解题思路:循环实现,将数组模拟成一个圈


注意事项:大佬帮忙看看优化,指正思路;

参考代码:

import java.util.Scanner;

public class Demo01 {
   public static void main(String[] args) {
       //     有n人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号的那位。
       Scanner sc = new Scanner(System.in);
       int n =sc.nextInt();
       int []arr = new int[n];
       for (int i = 1; i <= arr.length; i++) {
           arr[i-1] = i;
       }
       int[] c = c(arr);
       System.out.println(c[0]);
   }
   public static int[] a(int []arr,int len){
       for (int i = 2; i <= arr.length-len; i+=3) {
           arr[i] = 0;
       }
       return arr;
   }
   public static int[] b(int []ra,int []b ){
       for (int i = 0; i < ra.length; i++) {
           System.out.print("ra:"+ra[i]+" ");
       }
       System.out.println();
       for (int i = 0; i < b.length; i++) {
           System.out.print("b:"+b[i]+" ");
       }
       System.out.println();

       int len = ra.length-(ra.length/3);
       System.out.println("len:"+len);
       int []arr = new int[len];
       if(ra.length%3==0){

           int index = 0;
           for (int i = 0; i < ra.length; i++) {
               if (ra[i] != 0) {
                   arr[index] = ra[i];
                   index++;
               }
           }
       }else {
           for (int i = 0; i < b.length; i++) {
               arr[i] = b[i];
           }
           int index = 0;
           for (int i = 0; i < ra.length-b.length; i++) {
               if(ra[i]!=0){
                   arr[index+ b.length]=ra[i];
                   index++;
               }
           }
       }

       if (arr.length==2) {
           int []arr1 = {arr[1]};
           return arr1;
       }else {
           for (int i = 0; i < arr.length; i++) {
               System.out.print(arr[i]+" ");
           }
           System.out.println();
           return arr;
       }

   }

   public static int[] c(int []arr){
       if(arr.length==1){
           return arr;
       }
       int len = arr.length % 3;
       int[] ra = a(arr, len);
       if(len==0){
          int [] a = new int[2];
           int bIndex = 0;
           for (int i = arr.length-3; i < arr.length-1; i++) {
               a[bIndex] = arr[i];
               bIndex++;
           }
           return c(b(ra,a));
       }else {
           int [] b = new int[len];
           int bIndex = 0;
           for (int i = arr.length-len; i < arr.length; i++) {
               b[bIndex] = arr[i];
               bIndex++;
           }
           return c(b(ra,b));
       }
   }
}

 

0.0分

3 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区