验证中...
7.21 杭州源创会火热报名中,一起来看看移动开发如何紧跟浪潮?
约瑟夫环问题_n个人围成一圈,从第一个人开始报数,数到K的人出局,然后从下一个人接着报数,直到最后一个人,求最后一个人的编号
原始数据 复制代码
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<Integer>(); //创建集合存储1到num的对象
for(int i = 1; i <= num; i++) {
list.add(i); //将1到num存储在集合中
}
int count = 1; //用来数数的,只要是3的倍数就杀人
for(int i = 0; list.size() != 1; i++) {//只要集合中人数超过1,就要不断的杀
if(i == list.size()) { //如果i增长到集合最大的索引+1时
i = 0; //重新归零
}
if(count % 3 == 0) { //如果是3的倍数
list.remove(i--); //就杀人,杀了人后面的往前填了,--表示向前移一位
}
count++;
}
return list.get(0);
}

评论列表( 0 )

你可以在登录后,发表评论

11_float_left_people 11_float_left_close