黑马程序员技术交流社区
标题:
有n个人围成一圈,顺序排号。从第一个人开始报数。。
[打印本页]
作者:
jeasonlzy
时间:
2015-3-15 13:39
标题:
有n个人围成一圈,顺序排号。从第一个人开始报数。。
本帖最后由 jeasonlzy 于 2015-3-15 13:41 编辑
题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
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;
}
int leftCount = n;
int countNum = 0;
int index = 0;
while(leftCount > 1) {
if(arr[index] == true) {
countNum ++;
if(countNum == 3) {
countNum =0;
arr[index] = false;
leftCount --;
}
}
index ++;
if(index == n) {
index = 0;
}
}
for(int i=0; i<n; i++) {
if(arr == true) {
System.out.println("原排在第"+(i+1)+"位的人留下了。");
}
}
}
}
复制代码
作者:
千殇一梦
时间:
2015-3-15 14:01
来看看思路。
作者:
thoris
时间:
2015-3-15 19:53
好高级 学习一下方法~ 第8行和28行 有点小错误 应该是arr[i]
作者:
thoris
时间:
2015-3-15 20:15
试着分析一下思路:
首先要导入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)+"位的人留下了。");
}
}
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2