黑马程序员技术交流社区
标题:
算法题
[打印本页]
作者:
失乐缘
时间:
2019-10-10 15:13
标题:
算法题
public void
猴子报数
(){
//m
只猴子围成一圈报数,报
n
的猴子自动离开,
//
然后下一位重新从
1
开始报数,一直循环,
//
最后剩下的那个猴子就是猴大王,
//
写出程序求出最后是大王的那只猴子最初的位置。
//m,n
需要设置
//
报数出局时 记录出局猴,在所有猴都报完一轮数后进行清算
//
然后继续
List<Integer> list=
new
ArrayList()
;
int
m[]=
new int
[
11
]
;
//
装填
7
只猴子
7
可变
for
(
int
i=
1
;
i<=m.
length
;
i++){
m[i-
1
]=i
;
list.add(m[i-
1
])
;
}
int
b=
4
;
//
设置报数 报到
3
就
gck 3
可变
List<Integer> cj=
new
ArrayList<>()
;
int
i=
1
;
//
报数从
1
开始
while
(
true
){
for
(Integer integer : list) {
//
遍历猴 猴报数
//System.out.println(integer+"
号喊
"+i);
i++
;
if
(i%(b+
1
)==
0
){
//
代表有猴出局了
cj.add(integer)
;
//
记录出局的猴 记录元素
// System.out.println(integer+"
号出局
");
i=
1
;
//
出局代表需 重置报数到
1
}
}
//
到此处代表一轮已过,到清算时间
for
(
int
j = cj.size()
;
j>=
1
;
j--) {
//
开始清算
list.remove(cj.get(j-
1
))
;
//
清算的是元素 不是索引
}
//
清空清算名单
cj.clear()
;
System.
out
.println(
"
一轮过后的
list"
+list)
;
// System.out.println("
此时
i="+i);
if
(list.size()==
1
){
//
当只剩最后一个时退出
break;
}
}
System.
out
.println(
"
猴王是
:"
+list.get(
0
)+
"
号
"
)
;
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2