Test_Java_集合练习(约瑟夫环/幸运数字)
需求:使用Java程序求解约瑟夫环的问题
约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列被杀死;他的下一个人又从1开始报数,数到m的那个人又出列被杀死;依此规律重复下去,直到圆桌周围的人全部出列被杀死,只剩最后一个人为止,此时游戏结束,此人为赢家,也称该数字为幸运数字。
import java.util.ArrayList;
public class Test7 {
/*
* 约瑟夫环(幸运数字)
*/
public static void main(String[] args) {
System.out.println(getLucklyNum(8)); //参数代表参与游戏人的个数
}
/*
* 获取幸运数字
* 1.返回值类型int
* 2.参数列表int num
*/
public static int getLucklyNum(int num){
ArrayList<Integer> list = new ArrayList<>(); //创建集合存储i到num的对象
for (int i = 1; i <= num; i++) {
list.add(i); //将i到num存储在集合中
}
int count = 1; //用来数数的,只要是3的倍数就杀人
for(int i=0; list.size()!=1; i++){ //只要集合中人数超过1,就要不断地杀人
if(i == list.size()){ //如果i增长到集合最大的索引+1时
i = 0; //重新归0
}
if(count % 3 ==0){ //如果是3的倍数
list.remove(i--); //就杀人
}
count++;
}
return list.get(0);
}
}