50,528
社区成员
发帖
与我相关
我的任务
分享
package day;
import java.util.Scanner;
public class Chuquan {
/**
* 约瑟夫环的实现
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//此程序被踢的人还在自己的位置,这样不管转多少圈,都能很方便的知道自己原先的位置
System.out.println("请输入总人数n:"); //输入总人数
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
System.out.println("请输入要出圈的数值m:"); //输入出圈的数值
int m=sc.nextInt();
System.out.println("出圈顺序是:");
int[] a=new int[n];
int ren=n; //当前圈子总人数,初始值为n
for(int i=0;i<a.length;i++) //为人编号1--n入组
a[i]=i+1;
int i=0; //数组下标
int j=1; //标记 当前报数 从1开始,到m后,重置为1,继续
while(ren>0){ //圈内有人
if(a[i%n]>0){ // 这里指还在圈的人 i%n 为保证连环 i一直增,否则只执行一轮 而%n 保证其是原来最初位置
if(j%m==0){ //满足条件能被整除,跳出圈并输出原先位置
System.out.print(a[i%n]+" ");
a[i%n]=0; //ciren被踢 置为0
j=1; //重置,使下一个报1
i++;
ren--;
}
else{
i++; //不满足条件,正常按序报数
j++;
}
}
else{//遇到被踢的人了,此人已死 ,跳到下一位,j不加一,死人不能报数
i++;
}
}
}
}
import java.util.ArrayList;
import java.util.List;
public class NPeople
{
//总人数设置
private static final int N = 5;
public static void main(String[] args)
{
//n个人的编号
List<Integer> nList = new ArrayList<Integer>();
//初始化
for (int i = 1; i <= N; i++)
{
nList.add(i);
}
showGetOutPeoples(nList, N);
}
/**
* N个人报数N,N出列
* @param list
* @param n2
*/
private static void showGetOutPeoples(List<Integer> list, int n2)
{
//计数器
int counter;
//出列下标
int index = 0;
for (int size = list.size(); size > 0; size--)
{
counter = 0;
while (counter++ < N-1)
{
++index;
index = index % size;
}
System.out.println("第" + N + "个人出列,编号为:" + list.remove(index));
//对index调整
if (index >= size)
{
index = 0;
}
}
}
}