题目:
30 个人在一条船上,超载,需要 15 人下船。于是人们排成一队,排队的位置即为他们的编号。报数,从 1 开始,数到 9 的人下船。如此循环,直到船上仅剩 15 人为止,问都有哪些编号的人下船了呢?
![](https://img-blog.csdnimg.cn/img_convert/a7f0ff216534a8b4e07e3d67a724f188.png)
python
# !/usr/bin/python3
def ysf(nums,step,stay):
people = list(range(1,nums+1))
while len(people)>stay:
i = 1
while(i<step):
people.append(people.pop(0))
i+=1
print("{:2d}号要下船了".format(people.pop(0)))
if __name__ == '__main__':
ysf(30,9,15)
java
package org.java.base.algorithm;
import javax.validation.constraints.Max;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ConcurrentLinkedQueue;
/**
* @ClassName Ysf
* @Description TODO
* @Author liuhaihua
* @Date 2021/7/29 21:59
* @Version 1.0
*/
public class Ysf {
public static void main(String[] agrs){
ysf(30,9,15);
}
public static void ysf(int nums,int step,int stay){
ConcurrentLinkedQueue people = new ConcurrentLinkedQueue();
for(int i=1;i<=nums;i++){
people.add(i);
}
while(people.size()>stay){
int j=1;
while(j<step){
people.add(people.poll());
j++;
}
System.out.println(people.poll()+"要下船了");
}
}
}
运行结果:?
9要下船了
18要下船了
27要下船了
6要下船了
16要下船了
26要下船了
7要下船了
19要下船了
30要下船了
12要下船了
24要下船了
8要下船了
22要下船了
5要下船了
23要下船了