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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 jeasonlzy 于 2015-3-15 13:41 编辑

题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。   


  1. public class Baoshu {
  2. public static void main(String[] args) {
  3.    Scanner s = new Scanner(System.in);
  4.    System.out.print("请输入排成一圈的人数:");
  5.    int n = s.nextInt();
  6.    boolean[] arr = new boolean[n];
  7.    for(int i=0; i<arr.length; i++) {
  8.     arr = true;
  9.    }
  10.    int leftCount = n;
  11.    int countNum = 0;
  12.    int index = 0;
  13.    while(leftCount > 1) {
  14.     if(arr[index] == true) {
  15.      countNum ++;
  16.      if(countNum == 3) {
  17.       countNum =0;
  18.       arr[index] = false;
  19.       leftCount --;
  20.      }
  21.     }
  22.      index ++;
  23.      if(index == n) {
  24.      index = 0;
  25.     }
  26.    }
  27.     for(int i=0; i<n; i++) {
  28.     if(arr == true) {
  29.      System.out.println("原排在第"+(i+1)+"位的人留下了。");
  30.     }
  31.    }
  32. }
  33. }
复制代码

3 个回复

倒序浏览
来看看思路。
回复 使用道具 举报
好高级   学习一下方法~  第8行和28行  有点小错误  应该是arr[i]
回复 使用道具 举报
试着分析一下思路:
首先要导入Scanner
public class Baoshu {
public static void main(String[] args) {
   Scanner s = new Scanner(System.in);
   System.out.print("请输入排成一圈的人数:");
   int n = s.nextInt();
   boolean[] arr = new boolean[n];
   for(int i=0; i<arr.length; i++) {
    arr = true;
   }//定义一个布尔值数组,全部为true
   int leftCount = n;
   int countNum = 0;
   int index = 0;
   while(leftCount > 1) {
    if(arr[index] == true) {
     countNum ++; //从arr[0]开始,报数,每次countNum+1
     if(countNum == 3) {
      countNum =0;
      arr[index] = false;
      leftCount --;//每次数到3的时候,将该角标定义为false,剩余数减1
     }
    }
     index ++;
     if(index == n) {
     index = 0;//每循环一次,角标+1,但是当角标=n的时候,角标变成0。index的最大值是n-1,所以刚好不会越界。
    }
   }//当剩余数只有一个时,循环结束。打印剩余数的角标
    for(int i=0; i<n; i++) {
    if(arr== true) {
     System.out.println("原排在第"+(i+1)+"位的人留下了。");
    }
   }
}
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马