您的位置:首页 > 其它

【每天学点算法题10.16】约瑟夫环问题

2013-10-16 21:11 246 查看
问题描述:由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
;
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++;
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: