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

约瑟夫环问题

2016-07-05 20:39 489 查看

n个人编号为1,2…n,每次数到m,编号为m的人就退出,问最后留下的人的编号是多少

package com.lxm.algorithm;
import java.util.Scanner;
public class YSF
{
public static void main(String[] args)
{
Scanner scanner = new Scanner(System.in);
while(scanner.hasNext())
{
int n = scanner.nextInt();
int m = scanner.nextInt();
int result = ysf(n,m);
System.out.println(result);
}

}

public static int  ysf(int n, int m)
{
//initialize array
int[] data  = new int
;
for(int i=0;i<n;i++)
{
data[i] = i+1;
}

int left = n;//lasted people
int index = -1;
int num=0;

while(left>1)
{
index =( index+1)%n;
if(data[index]!=0)
{
++num;
if(num==m)
{
data[index] = 0;
--left;
num=0;
}
}
}
for(int i=0;i<n;i++)
{
if(data[i]!=0)
{
return i+1;
}
}

return -1;

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  string class java 约瑟夫