有人說這題屬於棧或者隊列,個人覺得說集合應該比較準確點。
Problem Description
Input
Output
Sample Input
Sample Output
注意:
這裏要注意題目說的報數一二,是指所有人中按順序報完爲後,再進行報一二三。如有:
第一次報數一二:人員: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()+" ");
}
}
}
}
}