2006程式設計競賽第五題
題目:
序位問題有一個 n 個平面上點的集合 S = {P1,P2 ..,Pn}。假設用(xi, yi)表示點 Pi的座標。如
果 xi> xj且 yi > y,我們說點 j Pi控制(dominate)點 Pj。序位問題是要求出每個 S 中的點在 S
中能控制的點之個數。請寫一程式決定輸入點中的每點的能控制的點數。
輸入格式:
< P1 的座標>
< P2 的座標>
...
< Pn 的座標>
輸出格式:
< P1 在 S 中能控制的點之個數>
< P2 在 S 中能控制的點之個數>
...
< Pn 在 S 中能控制的點之個數>
程式碼:
/* 序位問題 有一個 n 個平面上點的集合 S = {P1, P2 ..,Pn}。假設用(xi, yi)表示點 Pi的座標。如 果 xi> xj且 yi > y,我們說點 j Pi控制(dominate) 點 Pj。序位問題是要求出每個 S 中的點在 S 中能控制的點之個數。請寫一程式決定輸入 點中的每點的能控制的點數。 輸入格式: < P1 的座標> < P2 的座標> ... < Pn 的座標> 輸出格式: < P1 在 S 中能控制的點之個數> < P2 在 S 中能控制的點之個數> ... < Pn 在 S 中能控制的點之個數> */ import java.util.*; public class E2006_5{ public static void main(String[] args) { Scanner sc = new Scanner(System.in); /* 將 HashMap 存放置 ArrayList 容器 */ ArrayList> list = new ArrayList<>(); while(sc.hasNextInt()){ int x = sc.nextInt();//輸入x座標 int y = sc.nextInt();//輸入y座標 /* 使用 Key-Value(鍵-值) 方式儲存 */ HashMap listHM = new HashMap<>(); listHM.put("x", x);//設定(鍵,值) listHM.put("y", y);//設定(鍵,值) list.add(listHM);//新增置 list 容器 int count = 0; //計數 boolean is = true; /* 列出所有元素方式 */ /* Collection collection = map.values(); // 透過 values() 取得 Collection Iterator iterator = collection.iterator(); // 再由 Collection 變出 Iterator while(iterator.hasNext()) // 最後由 Iterator 列出所有元素 System.out.println(iterator.next()); System.out.println(); Iterator iterator; for(iterator = list.iterator(); iterator.hasNext();){ System.out.println(iterator.next()); } */ /* 取出 list 容器的值 */ for(int i=0; i data = list.get(i); //把取得 list 容器裡的值,存放置 data(HashMap)。 /* 進行題目要求之判斷 */ if(x<= data.get("x")){ //用 data.get(鍵) 取值 is = false; } if(y<= data.get("y")){ is = false; } if(is){ count++; } } System.out.println(count); } } }
輸入範例: 1 1 2 3 3 2 4 1 輸出範例: 0 1 1 0
結果:
1 1
0
2 3
1
3 2
1
4 1
0
心得:
感謝朋友,教我此方式。歡迎交流。
留言
張貼留言