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


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

    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);
                      }
               }       
        }
    }
  • 相关阅读:
    Enterprise Solution 开发框架功能点
    设置Form窗体中的控件的属性
    Enterprise Solution 生成实体数据访问接口与实现类型 Code Smith 6.5 模板文件下载
    Enerprise Solution Main 启动方法源代码
    Enterprise Solution 2.3
    .NET 程序启动调试器 .NET 测试代码耗费时间
    代码拼写检查
    编码原则:不变量/前置条件/后置条件
    金融:收益利率计算器
    技术人生:本周改进计划
  • 原文地址:https://www.cnblogs.com/qdu-lkc/p/12215815.html
Copyright © 2020-2023  润新知