java 约瑟夫环 数组实现 已测试
class YueSeFu
{
public static int circleRun(int person , int num)
{
int array[] = new int[person];
int flag = 0;
int person_flag=0;
//-----------------初始化数组--------------------
for (int i = 0; i < person ; i++ )
{
array[i] = i+1;
}
//----------------执行约瑟夫环规则---------------------
while(person>1)
{
for (int i = 1; i <= num ; i++, flag++ )
{
if (flag == array.length)
{
flag = 0;
}
while(array[flag]==0)
{
flag++;
if (flag == array.length)
{
flag = 0;
}
}
if (i==num )
{
array[flag] = 0;
person--;
}
}
}
//----------------遍历数组,不为零则返回--------------------
for (int i = 0; i<array.length ; i++ )
{
if (array[i]!=0 )
{
person_flag = array[i];
}
}
System.out.println("最后一个人的编号为:"+ circleRun(14,3));
System.out.println("最后一个人的编号为:"+ circleRun(11,3));
System.out.println("最后一个人的编号为:"+ circleRun(2,3));
System.out.println("最后一个人的编号为:"+ circleRun(2,2));
System.out.println("最后一个人的编号为:"+ circleRun(3,3));
}
{
public static int circleRun(int person , int num)
{
int array[] = new int[person];
int flag = 0;
int person_flag=0;
//-----------------初始化数组--------------------
for (int i = 0; i < person ; i++ )
{
array[i] = i+1;
}
//----------------执行约瑟夫环规则---------------------
while(person>1)
{
for (int i = 1; i <= num ; i++, flag++ )
{
if (flag == array.length)
{
flag = 0;
}
while(array[flag]==0)
{
flag++;
if (flag == array.length)
{
flag = 0;
}
}
if (i==num )
{
array[flag] = 0;
person--;
}
}
}
//----------------遍历数组,不为零则返回--------------------
for (int i = 0; i<array.length ; i++ )
{
if (array[i]!=0 )
{
person_flag = array[i];
}
}
return person_flag
}
public static void main(String[] args)
{System.out.println("最后一个人的编号为:"+ circleRun(14,3));
System.out.println("最后一个人的编号为:"+ circleRun(11,3));
System.out.println("最后一个人的编号为:"+ circleRun(2,3));
System.out.println("最后一个人的编号为:"+ circleRun(2,2));
System.out.println("最后一个人的编号为:"+ circleRun(3,3));
}
}
运行结果如下: