您的位置:首页 > 编程语言 > Java开发

五十道编程小题目 --- 37 有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子 java

2016-09-09 11:13 435 查看
【程序37】 

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

import java.util.Arrays;
import java.util.Scanner;

import net.mindview.util.Print;

public class Test37 {

public static void main(String[] args) {
System.out.println("-------------'%'测试-------------");
System.out.println("'%' 可以制造出循环的效果:");
for (int i = 1; i < 10;i++ ) {
System.out.println(i%4);
}
System.out.println("-------------测试结束-------------");
System.out.println();
System.out.println();
System.out.println("-------------测试开始-------------");
for (int i = 5; i < 40;i++ ) {
findLast(i);
}
System.out.println("-------------测试结束-------------");

//		System.out.println("请输入人数:");
//		Scanner s = new Scanner(System.in);
//		int n = s.nextInt();
//		findLast(n);

}

private static void findLast(int n) {
int[] arr = new int
;
boolean[] people = new boolean
;
Arrays.fill(people,true);
int i = 0,j = 0, k = 1, m = n;
for(;j<m; i = ++i%m ,k = ++k%4){
if(k==0){ //去除k=0的时候,只留下值为1,2,3的k,
i--; //因为k这时有四个数再循环,当k=0时,当前报数的重报,即下个for循环还是当前报数人
continue;
}
if(people[i]){
if(k%3 == 0){
arr[j]  = i+1;
j++;
n--;
people[i] = false;
}
}else{
k--;//如果已经将该人设置为false,则下个人还报当前这个k值,所以k--,与下个for循环的k++抵消
}
}
print(arr);
}

// 打印数组
public static void print(int[] arr) {
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
}

}
输出结果:

-------------'%'测试-------------
'%' 可以制造出循环的效果:
1
2
3
0
1
2
3
0
1
-------------测试结束-------------

-------------测试开始-------------
3 1 5 2 4
3 6 4 2 5 1
3 6 2 7 5 1 4
3 6 1 5 2 8 4 7
3 6 9 4 8 5 2 7 1
3 6 9 2 7 1 8 5 10 4
3 6 9 1 5 10 4 11 8 2 7
3 6 9 12 4 8 1 7 2 11 5 10
3 6 9 12 2 7 11 4 10 5 1 8 13
3 6 9 12 1 5 10 14 7 13 8 4 11 2
3 6 9 12 15 4 8 13 2 10 1 11 7 14 5
3 6 9 12 15 2 7 11 16 5 13 4 14 10 1 8
3 6 9 12 15 1 5 10 14 2 8 16 7 17 13 4 11
3 6 9 12 15 18 4 8 13 17 5 11 1 10 2 16 7 14
3 6 9 12 15 18 2 7 11 16 1 8 14 4 13 5 19 10 17
3 6 9 12 15 18 1 5 10 14 19 4 11 17 7 16 8 2 13 20
3 6 9 12 15 18 21 4 8 13 17 1 7 14 20 10 19 11 5 16 2
3 6 9 12 15 18 21 2 7 11 16 20 4 10 17 1 13 22 14 8 19 5
3 6 9 12 15 18 21 1 5 10 14 19 23 7 13 20 4 16 2 17 11 22 8
3 6 9 12 15 18 21 24 4 8 13 17 22 2 10 16 23 7 19 5 20 14 1 11
3 6 9 12 15 18 21 24 2 7 11 16 20 25 5 13 19 1 10 22 8 23 17 4 14
3 6 9 12 15 18 21 24 1 5 10 14 19 23 2 8 16 22 4 13 25 11 26 20 7 17
3 6 9 12 15 18 21 24 27 4 8 13 17 22 26 5 11 19 25 7 16 1 14 2 23 10 20
3 6 9 12 15 18 21 24 27 2 7 11 16 20 25 1 8 14 22 28 10 19 4 17 5 26 13 23
3 6 9 12 15 18 21 24 27 1 5 10 14 19 23 28 4 11 17 25 2 13 22 7 20 8 29 16 26
3 6 9 12 15 18 21 24 27 30 4 8 13 17 22 26 1 7 14 20 28 5 16 25 10 23 11 2 19 29
3 6 9 12 15 18 21 24 27 30 2 7 11 16 20 25 29 4 10 17 23 31 8 19 28 13 26 14 5 22 1
3 6 9 12 15 18 21 24 27 30 1 5 10 14 19 23 28 32 7 13 20 26 2 11 22 31 16 29 17 8 25 4
3 6 9 12 15 18 21 24 27 30 33 4 8 13 17 22 26 31 2 10 16 23 29 5 14 25 1 19 32 20 11 28 7
3 6 9 12 15 18 21 24 27 30 33 2 7 11 16 20 25 29 34 5 13 19 26 32 8 17 28 4 22 1 23 14 31 10
3 6 9 12 15 18 21 24 27 30 33 1 5 10 14 19 23 28 32 2 8 16 22 29 35 11 20 31 7 25 4 26 17 34 13
3 6 9 12 15 18 21 24 27 30 33 36 4 8 13 17 22 26 31 35 5 11 19 25 32 2 14 23 34 10 28 7 29 20 1 16
3 6 9 12 15 18 21 24 27 30 33 36 2 7 11 16 20 25 29 34 1 8 14 22 28 35 5 17 26 37 13 31 10 32 23 4 19
3 6 9 12 15 18 21 24 27 30 33 36 1 5 10 14 19 23 28 32 37 4 11 17 25 31 38 8 20 29 2 16 34 13 35 26 7 22
3 6 9 12 15 18 21 24 27 30 33 36 39 4 8 13 17 22 26 31 35 1 7 14 20 28 34 2 11 23 32 5 19 37 16 38 29 10 25
-------------测试结束-------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐