问题描述:由n个人形成首尾相连的圈,然后进行报数,第一个人从1开始报数,报到的数为m的人出列。剩下的人继续从1开始报数,报到的数为m的再出列.......直到所有人都出来为止。对于给定的n和m,求出所有人的出列顺序,以及最后一个出列的人标号。
解决办法: 我们用数组来完成,示例代码如下:
import java.util.Arrays;
import java.util.Scanner;
/**
@author dyoyo90
*/
public class JosephCircle {
private static int count=0;
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
System.out.println("Please insert the count of people:");
int n=scanner.nextInt();
System.out.println("Please insert the out number:");
int m=scanner.nextInt();
sortP(n,m);
}
private static void sortP(int n, int m) {
if(n==1){
System.out.println(n);;
}
else{
f1(n, m);
}
}
private static void f1(int n, int m) {
int[] arr = new int[n];
for(int j=0;j<n;j++){
for(int i = 0;i<m;i++){
count++;
if(j>0){
measure(j, arr);
}
if(count>n){
count=1;
measure(j, arr);
}
}
arr[j]=count;
}
System.out.println("The sequence of out :"+Arrays.toString(arr));
System.out.println("The last one:"+arr[n-1]);
}
private static void measure(int n,int[] arr) {
for(int s = 0;s<n;s++){
for(int w=0;w<n;w++){
if(count==arr[w])
count++;
}
}
}
}