public class yuesefu_ring { /**
 * @param args
 */

public static int[] create(int n)
{
int matrix[]=new int[n];
for(int i=0;i<n;i++)
matrix[i]=i+1;
return matrix;
}

public static void sort(int matrix[],int m)
{
int n=matrix.length;
int record;
while(n>0)
{
while(m>n)
m-=n;
record=matrix[m-1];
int ling[]=new int[m-1];
for(int i=0;i<m-1;i++)
ling[i]=matrix[i];
for(int i=m;i<n;i++)
matrix[i-m]=matrix[i];
for(int i=0;i<ling.length;i++)
matrix[i+n-m]=ling[i];
matrix[--n]=record;
}
}

public static void print(int matrix[])
{
for(int i=matrix.length-1,flag=0;i>=0;i--)
{
System.out.print(matrix[i]+"   ");
flag++;
if(flag%10==0)
System.out.println();
}
System.out.println();
}

public static void main(String[] args) {
// TODO Auto-generated method stub
int n=100,m=12;
int matrix[]=new int[n];
matrix=create(n);
sort(matrix,m);
print(matrix);
}}

解决方案 »

  1.   

    约瑟夫环问题 上面是我不用递归算法的代码 求递归算法解决的办法  要原创 不要百度或者coogle的
      

  2.   


    public class Yuesefu {
    public static void main(String[] args){
    int[] person = new int[17];
    int count = 17, num = 3;
    int tmp = 0;
    int i, killed = 0;
    //person[i] = 1 表示第i+1个人在圈内
    //person[i] = 0表示把第i+1个人扔入大海
    for(i = 0; i < count; ++i)
    person[i] = 1;

    i = 0;
    while(killed != count)
    {
    if(i == count)
    i = 0;
    tmp += person[i];
    if(tmp == num)
    {
    person[i] = 0;
    ++killed;
    System.out.println(i+1 + " is killed");
    tmp = 0;
    }
    ++i;
    }

    }}
      

  3.   

    public class Josephus3
    {
    public static void main(String[] args)
    {
    int n = Integer.parseInt(args[0]);//总人数
    int m = Integer.parseInt(args[1]);//报名数大小(从0报到m)
    Jos jos=new Jos();
    System.out.println("最后一个数为:"+jos.josephus3(n,m));
    }
    }class Jos
    {
    public int josephus3(int n, int m)
    {
    int r = 0;
    for (int i = 2; i <= n; i++)
    {
    r = (r + m) % 1;
    }
    return r + 1;
    }
    }