【每天学点算法题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++; } } } }
相关文章推荐
- 【每天学点算法题10.16】斐波那契数列问题
- 每天一道算法题(23)——约瑟夫环问题
- 每天一道算法题(23)——约瑟夫环问题
- 每天一道算法题(36)——8皇后问题
- 约瑟夫环问题的数学优化算法-(应用于System Overload zju1088)
- [c#算法和数据结构]约瑟夫环问题
- 每天一道算法题(36)——8皇后问题
- 每天一算法(三)生产着消费者问题
- 约瑟夫环问题(根据算法竞赛入门经典一题改编)
- 常用算法(C#): 约瑟夫环问题
- [算法]约瑟夫环问题
- 【每天学点算法题10.16】由rand7()生成rand10()
- 算法----约瑟夫环问题
- 算法:约瑟夫环问题
- 约瑟夫环问题算法
- 【算法题目】约瑟夫环问题
- 算法----约瑟夫环问题
- 每天一道算法题(四) (动态规划算法)01背包问题Java实现
- c# 算法-------约瑟夫环问题
- 算法学习笔记之约瑟夫环问题