這水題,真的坑java
測試數據最後有空行,若是用sc.hasNextLine()判斷,會RE數組
要改成sc.hasNext()測試
搞了我一上午,煩死code
import java.util.*; public class POJ1591 { static Scanner sc = new Scanner(System.in); static int N=20; static class Item{ int name; Item next; Item pre; } static Item first; static Item last; static int[] cards; static void count(int total,int left){ if(total<=left){ Item item = first.next; while (item!=null){ if(item.next!=null) System.out.print(item.name+" "); else System.out.println(item.name); item=item.next; } return; } int icard=0,card=0; // 循環直到剩下left我的 while (total>left){ Item item=first.next; card=cards[icard++]; while (item!=null){ //每次向前走cards[icard]步 int i; for(i=1;i<card;i++){ if(item!=null) item=item.next; else break; } if(i==card && item!=null) { total--; //刪除第cards[cardi]我的 if (item.pre != null) { item.pre.next = item.next; } if (item.next != null) { item.next.pre = item.pre; } if (item == last) last = item.pre; item = item.next; } // 只剩left我的,輸出結果 if(total==left){ item = first.next; while (item!=null){ if(item.next!=null) System.out.print(item.name+" "); else System.out.println(item.name); item=item.next; } return; } } } } static void run(){ // 構建鏈表 first = new Item(); first.next=first.pre=null; first.name=Integer.MIN_VALUE; last=first; String[] s = sc.nextLine().split(" "); // 總人數 int n=Integer.parseInt(s[0]); // 能夠回家的人數 int left = Integer.parseInt(s[1]); cards = new int[N]; for(int i=1;i<=n;i++){ Item item = new Item(); item.name = i; item.next = null; item.pre = last; last.next = item; last=item; } // 初始化卡片數組 for(int i=2;i<s.length;i++){ cards[i-2]=Integer.parseInt(s[i]); } // 進入計算 count(n,left); } public static void main(String[] args) { int so=1; while (sc.hasNext()){ System.out.println("Selection #"+so); run(); System.out.println(); so++; } } }