点击打开链接

有人说这题属于栈或者队列,个人认为说集合应该比較准确点。

Problem Description

某部队进行新兵队列训练,将新兵从一開始按顺序依次编号。并排成一行横队,训练的规则例如以下:从头開始一至二报数,凡报到二的出列。剩下的向小序号方向靠拢,再从头開始进行一至三报数。凡报到三的出列,剩下的向小序号方向靠拢,继续从头開始进行一至二报数。。。

,以后从头開始轮流进行一至二报数、一至三报数直到剩下的人数不超过三人为止。

 

Input

本题有多个測试数据组。第一行为组数N,接着为N行新兵人数,新兵人数不超过5000。
 

Output

共同拥有N行,分别相应输入的新兵人数,每行输出剩下的新兵最初的编号,编号之间有一个空格。

 

Sample Input

2
20
40
 

Sample Output

1 7 19
1 19 37

注意:

这里要注意题目说的报数一二。是指全部人中按顺序报完为后,再进行报一二三。如有:

第一次报数一二:人员:1 2 3 4 5 6 7 8 9 10

报数:1 2 1 2 1 2 1 2 1 2

第二次报数一二三:人员:1 3 5 7 9

报数: 1 2 3 1 2

如此循环上面两步。知道人员人数不超过三为止。

另一个细节就是在输出是,控制一下格式问题,最后一个后面不能有空格

代码:

import java.util.Iterator;
import java.util.LinkedList;
import java.util.Scanner; public class P1276 { public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int num;
LinkedList<Integer> list;
while(n-->0){
num=sc.nextInt();
list=new LinkedList<Integer>();
for(int i=0;i<num;i++){//向集合中加入人员
list.add(i+1);
}
// Iterator<Integer> it=queue.iterator();
// while(it.hasNext()){
// System.out.print(it.next()+" ");
// }
boolean flag=true;
while(list.size()>3){
//System.out.println(list.size());
if(flag){//控制一二和一二三模式之间互相进行
for(int i=1;i<list.size();i+=1){
// System.out.print(list.get(i)+" ");
list.remove(i);//除去喊到二的人
flag=false;
}
// System.out.println();
}else{
for(int i=2;i<list.size();i+=2){
// System.out.print(list.get(i)+" ");
list.remove(i);//除去喊到三的人
flag=true;
}
// System.out.println();
}
}
int remainNum=list.size();//必须提前把结果人数记录下来
Iterator<Integer> it=list.iterator();
int count=0;//用来控制最后一个空格问题
while(it.hasNext()){
count++;
if(count==remainNum){//这里不能用list.size(),由于在输出结果是,对应的元素已经出去了。全部size改变了
System.out.println(it.next());
}else{
System.out.print(it.next()+" ");
}
}
}
} }

hdu1276(士兵队列训练问题) java集合水过的更多相关文章

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

    目录 题目地址 题干 代码和解释 题目地址 hdu1276 题干 代码和解释 本题使用了STL中的list,STL的list是双向链表.它的内存空间不必连续,通过指针来进行数据的访问,高效率地在任意地 ...

  2. Java最重要的21个技术点和知识点之JAVA集合框架、异常类、IO

    (三)Java最重要的21个技术点和知识点之JAVA集合框架.异常类.IO  写这篇文章的目的是想总结一下自己这么多年JAVA培训的一些心得体会,主要是和一些java基础知识点相关的,所以也希望能分享 ...

  3. hdoj 1276 士兵队列训练问题【模拟】

    士兵队列训练问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Su ...

  4. (hdu step 8.1.6)士兵队列训练问题(数据结构,简单模拟——第一次每2个去掉1个,第二次每3个去掉1个.知道队伍中的人数&lt;=3,输出剩下的人 )

    题目: 士兵队列训练问题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total ...

  5. Java集合总结【面试题+脑图】,将知识点一网打尽!

    前言 声明,本文用的是jdk1.8 花了一个星期,把Java容器核心的知识过了一遍,感觉集合已经无所畏惧了!!(哈哈哈....),现在来总结一下吧~~ 回顾目录: Collection总览 List集 ...

  6. java集合框架容器 java框架层级 继承图结构 集合框架的抽象类 集合框架主要实现类

    本文关键词: java集合框架  框架设计理念  容器 继承层级结构 继承图 集合框架中的抽象类  主要的实现类 实现类特性   集合框架分类 集合框架并发包 并发实现类 什么是容器? 由一个或多个确 ...

  7. java集合框架(一):HashMap

    有大半年没有写博客了,虽然一直有在看书学习,但现在回过来看读书基本都是一种知识“输入”,很多时候是水过无痕.而知识的“输出”会逼着自己去找出没有掌握或者了解不深刻的东西,你要把一个知识点表达出来,自己 ...

  8. 【ACM】hdu_1276_士兵队列训练问题_201308131032

    士兵队列训练问题Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Sub ...

  9. HDU 1276 士兵队列训练问题(队列)

    题目网址:http://acm.hdu.edu.cn/showproblem.php?pid=1276 题目: 士兵队列训练问题 Time Limit: 2000/1000 MS (Java/Othe ...

随机推荐

  1. 英语发音规则---M字母

    英语发音规则---M字母 一.总结 一句话总结: 1.M发[m]音? monkey ['mʌŋkɪ] n. 猴子:顽童 come [kʌm] vi. 来 tomato [tə'mɑːtəʊ] n. 番 ...

  2. [IOI 1999] 花店橱窗布置

    [题目链接] https://www.luogu.org/problemnew/show/P1854v [算法] f[i][j]表示放了前i束花,第i束花放在第j个花瓶中,所能获得的最大美学值 由于要 ...

  3. jetty服务器数据源配置JNDI-Oracle,MySQL,SQLServer,DB2等 (转)

    下载jetty 下载jetty服务器(8.1.0.RC2),解压到任意目录下 http://dist.codehaus.org/jetty/jetty-hightide-8.1.0/jetty-hig ...

  4. BZOJ 3624 并查集 (Kruskal)

    思路: 先把所有能加上的水泥路都加上 判断哪些是必加的鹅卵石路 再重新做一遍最小生成树 加上必加的鹅卵石路 一直加鹅卵石路 判一下是不是=k 最后加上水泥路就好了 //By SiriusRen #in ...

  5. 利用 js 获取地址栏参数

    1.aspx页面,进行页面跳转 window.location.href = "ProviderInfo.aspx?ProviderID="+ProviderID; 2.Provi ...

  6. 读书笔记之《HTML5 与 CSS3 基础教程》

    1· 读前预期 考虑到对于 Web 开发零基础,凡涉足一件未知的任务,最好先理清任务的逻辑结构,然后有目的地逐步学习.为实现我们的需求和设计,必须要学习前端.后端.服务器等一系列暂时陌生的知识,在此, ...

  7. 在应用层通过spring特性解决数据库读写分离

    如何配置mysql数据库的主从? 单机配置mysql主从:http://my.oschina.net/god/blog/496 常见的解决数据库读写分离有两种方案 1.应用层 http://neore ...

  8. java处理日期时间代码

    public static String FORMATE_DATE_STR = "yyyy-MM-dd"; public static String FORMATE_TIME_ST ...

  9. 使用短信猫发送短信java代码

    短信猫简单配置:https://www.cnblogs.com/Big-Boss/p/9699880.html 发送短信: package utils; import org.smslib.AGate ...

  10. 为什么密信MeSince采用S/MIME加密?

    S/MIME是Secure/Multipurpose Internet Mail Extensions (安全多用途互联网邮件扩展协议)的缩写,是采用PKI技术的用数字证书给邮件主题签名和加密的国标标 ...