ccf 窗口 java 2014_3_2

問題描述
  在某圖形操作系統中,有 N 個窗口,每個窗口都是一個兩邊與座標軸分別平行的矩形區域。窗口的邊界上的點也屬於該窗口。窗口之間有層次的區別,在多於一個窗口重疊的區域裏,只會顯示位於頂層的窗口裏的內容。
  當你點擊屏幕上一個點的時候,你就選擇了處於被點擊位置的最頂層窗口,並且這個窗口就會被移到所有窗口的最頂層,而剩餘的窗口的層次順序不變。如果你點擊的位置不屬於任何窗口,則系統會忽略你這次點擊。
  現在我們希望你寫一個程序模擬點擊窗口的過程。
輸入格式
  輸入的第一行有兩個正整數,即 N 和 M。(1 ≤ N ≤ 10,1 ≤ M ≤ 10)
  接下來 N 行按照從最下層到最頂層的順序給出 N 個窗口的位置。 每行包含四個非負整數 x1, y1, x2, y2,表示該窗口的一對頂點座標分別爲 (x1, y1) 和 (x2, y2)。保證 x1 < x2,y1 2。
  接下來 M 行每行包含兩個非負整數 x, y,表示一次鼠標點擊的座標。
  題目中涉及到的所有點和矩形的頂點的 x, y 座標分別不超過 2559 和  1439。
輸出格式
  輸出包括 M 行,每一行表示一次鼠標點擊的結果。如果該次鼠標點擊選擇了一個窗口,則輸出這個窗口的編號(窗口按照輸入中的順序從 1 編號到 N);如果沒有,則輸出"IGNORED"(不含雙引號)。
樣例輸入
3 4
0 0 4 4
1 1 5 5
2 2 6 6
1 1
0 0
4 4
0 5
樣例輸出
2
1
1
IGNORED
樣例說明
  第一次點擊的位置同時屬於第 1 和第 2 個窗口,但是由於第 2 個窗口在上面,它被選擇並且被置於頂層。
  第二次點擊的位置只屬於第 1 個窗口,因此該次點擊選擇了此窗口並將其置於頂層。現在的三個窗口的層次關係與初始狀態恰好相反了。
  第三次點擊的位置同時屬於三個窗口的範圍,但是由於現在第 1 個窗口處於頂層,它被選擇。
  最後點擊的 (0, 5) 不屬於任何窗口。

思路:這道題有三點:

首先確認窗口,窗口選擇,窗口變動。

1、確認窗口。即確認應該選擇哪一個座標

2、窗口選擇。怎麼確定選擇哪個窗口,同時輸出

3、窗口的變動。即將窗口放到最上面

針對上面三個問題,我分別這樣做:

1、對第一個問題,將當前的點與窗口依次進行比較。

由於窗口已經是變動過的窗口,按照窗口從0到結束依次進行比較,這時就是由底向頂比較的過程。

2、編寫paixu函數。這個函數其實就是將確認的窗口與最原始的窗口進行比較,如果座標的四個值相等,即可確認是那個窗口。原始窗口我用window1表示。

有一點要注意,由於這個函數是循環比較,並且有賦值行爲,所以只能比較一次,不然就會出現重複相等的情況,所以用break來阻斷後面的循環。

3、這個步驟和數據結構中的鏈表用些相似,但是我沒用,直接編寫了。即把選定的窗口的值賦給temp,再將選定窗口之後的窗口前移一位,再將temp放到最後。

這道題,難度有些大感覺。

import java.util.Scanner;
public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Scanner sc =new Scanner(System.in);
		int N=sc.nextInt();
		int M=sc.nextInt();
		int[][] window=new int[N][4];
		int[][] window1=new int[N][4];
		int[][] arr=new int[M][2];
		for(int i=0;iup)
						{
							up=t;
						}
					}
				}
				if(up!=-1)
				{
					paixu(window,window1,up,N);
					up(window,up,N);
				}
				else 
				{
					System.out.println("IGNORED");
				}	
			}
		
		}
	public static void up(int[][] window,int up,int N)
	{
		int[] temp=new int[1000];
		temp=window[up];
		for(int i=up;i


對了,還有一點,IGNORED一定要寫對,我第一次少寫了一個D,結果只剩20分,寫上就滿分了。扣分好嚴重……

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章