标签:== 之间 队列 输入 集合 顺序 应该 data href
有人说这题属于栈或者队列,个人认为说集合应该比較准确点。
,以后从头開始轮流进行一至二报数、一至三报数直到剩下的人数不超过三人为止。
2 20 40
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()+" ");
}
}
}
}
}
标签:== 之间 队列 输入 集合 顺序 应该 data href
原文地址:http://www.cnblogs.com/jzssuanfa/p/6918321.html