有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。(1<=n<=1000000)
思路:用队列就可以解决,出队的同时入队,也就是将出队的数字入队到同一个队列的尾部,到了第三个数就直接出队,以此循环直到队列剩下三个元素,这时候取第二个即可
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner input=new Scanner(System.in);
int n=Integer.valueOf(input.nextLine());
Queue<Integer> queueN=new LinkedList<>();
for(int i=1;i<=n;i++){
queueN.offer(i);
}
if(n<=2){
System.out.println(n);
}else{
System.out.println(deleteThrid(queueN));
}
}
private static int deleteThrid(Queue<Integer> queueN){
while(queueN.size()>3) {
queueN.offer(queueN.poll());
queueN.offer(queueN.poll());
queueN.poll();
}
queueN.poll();
return queueN.poll();
}
}
(这样写的好处就是通用性好,也就是可以以此类推)