最大队伍士兵数java,hdu1276(士兵队列训练问题) java集合水过
发布日期:2021-06-24 14:05:11 浏览次数:2 分类:技术文章

本文共 1582 字,大约阅读时间需要 5 分钟。

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

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 list;

while(n-->0){

num=sc.nextInt();

list=new LinkedList();

for(int i=0;i

list.add(i+1);

}

//Iterator 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

//System.out.print(list.get(i)+" ");

list.remove(i);//除去喊到二的人

flag=false;

}

//System.out.println();

}else{

for(int i=2;i

//System.out.print(list.get(i)+" ");

list.remove(i);//除去喊到三的人

flag=true;

}

//System.out.println();

}

}

int remainNum=list.size();//必须提前把结果人数记录下来

Iterator 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()+" ");

}

}

}

}

}

转载地址:https://blog.csdn.net/weixin_33308985/article/details/115194978 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:php 上传文件实例,一个完整的php文件上传类实例讲解
下一篇:nginx php 虚拟主机配置,Nginx虚拟主机配置 + 虚拟主机支持PHP

发表评论

最新留言

表示我来过!
[***.240.166.169]2024年04月05日 13时47分39秒