士兵队列训练问题 (队列+模拟)

Posted qdu-lkc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了士兵队列训练问题 (队列+模拟)相关的知识,希望对你有一定的参考价值。

某部队进行新兵队列训练,将新兵从一开始按顺序依次编号,并排成一行横队,训练的规则如下:从头开始一至二报数,凡报到二的出列,剩下的向小序号方向靠拢,再从头开始进行一至三报数,凡报到三的出列,剩下的向小序号方向靠拢,继续从头开始进行一至二报数。。。,以后从头开始轮流进行一至二报数、一至三报数直到剩下的人数不超过三人为止。 

Input本题有多个测试数据组,第一行为组数N,接着为N行新兵人数,新兵人数不超过5000。 
Output共有N行,分别对应输入的新兵人数,每行输出剩下的新兵最初的编号,编号之间有一个空格。 
Sample Input

2
20
40

Sample Output

1 7 19
1 19 37

思路:循环队列

代码:
import java.util.ArrayDeque;
import java.util.Scanner;
public class Main{
      static void operate(int num){
            ArrayDeque<Integer> q=new ArrayDeque<>();
            for(int i=1;i<=num;i++)   q.offer(i);
            while(true){
                
                  if(q.size()<=3) break;
                  q.offer(1);
                  q.poll();
                  
                  for(int i=2;q.peek()!=1;i++){
                        if(i%2>0) {//一定是大于0,开始写成不等于1,我想存放的是下标不能被2整除的数
                              int t=q.peek();
                              q.offer(t);
                        }
                        q.poll();
                  }
                  
                  if(q.size()<=3) break;
                  q.offer(1);
                  q.poll();
                  for(int i=2;q.peek()!=1;i++){
                        if(i%3>0) {//一定大于0,开始写成不等于1,我想存放的是下标不能被3整除的数
                              int t=q.peek();
                              q.offer(t);
                        }
                        q.poll();
                  }
            }
            while(!q.isEmpty()){
                  System.out.print(q.poll());
                  if(q.size()!=0) System.out.print(" ");//注意是不等于0,而不是1
            }
            System.out.println();
      }
      public static void main(String[] args) {
           Scanner scan=new Scanner(System.in);
           while(scan.hasNext()){
                  int n=scan.nextInt();
                  while(n-->0){
                        int num=scan.nextInt();
                        operate(num);
                  }
           }       
    }
}

以上是关于士兵队列训练问题 (队列+模拟)的主要内容,如果未能解决你的问题,请参考以下文章

HDU - 1276士兵队列训练问题 (报数问题 模拟)

hdu-1276 士兵队列训练问题

杭电1276 士兵队列训练问题

Problem1276 士兵队列训练问题

hdu1276士兵队列训练问题[简单STL list]

用链表实现轻院1276士兵队列训练问题