時間限制:
3000 ms | 記憶體限制:
65535 kb
難度:3 描述
現在有很多長方形,每乙個長方形都有乙個編號,這個編號可以重複;還知道這個長方形的寬和長,編號、長、寬都是整數;現在要求按照一下方式排序(預設排序規則都是從小到大);
1.按照編號從小到大排序
2.對於編號相等的長方形,按照長方形的長排序;
3.如果編號和長都相同,按照長方形的寬排序;
4.如果編號、長、寬都相同,就只保留乙個長方形用於排序,刪除多餘的長方形;最後排好序按照指定格式顯示所有的長方形;
輸入第一行有乙個整數 0
每一組第一行有乙個整數 0
接下來的m行,每一行有三個數 ,第乙個數表示長方形的編號,
第二個和第三個數值大的表示長,數值小的表示寬,相等
說明這是乙個正方形(資料約定長寬與編號都小於10000);
輸出順序輸出每組資料的所有符合條件的長方形的 編號 長 寬
樣例輸入
181 1 1
1 1 1
1 1 2
1 2 1
1 2 2
2 1 1
2 1 2
2 2 1
樣例輸出
1 1 11 2 1
1 2 2
2 1 1
2 2 1
由題目:要注意一點:第二個和第三個數值大的表示長,數值小的表示寬,相等。
需要對長和寬進行處理。
思路:其實也很簡單,就是一種公升序的排列,還要涉及到權重,權重(編號》長》寬),只有相等的時候,才需要比較下乙個等級。並且,乙個尤其重要的是:涉及到交換和移動的時候一定要整體進行。而且測試用例有點坑嗲,如果你交換或移動沒有整體性的話,得出的結果和測試用例是一樣的。這就導致為什麼很多人士wrong answer 的。。---我就是其中乙個。
第一種方法:(同樣是用插入排序,把他寫熟了,效能是怎麼都好過氣泡排序的)
//暴力的插入排序,思想很簡單,根據權重順序進行排列,相等的時候,繼續比較下乙個(權重:編號,長,寬)不過不知道為何wrong answer,感覺思路是沒有錯的--原來是要整體**換
public void insertsortone(scanner sc)
//插入排序--先實現,後面再優化--交換的時候,要當成乙個整體進行交換,不是就會錯,而且給出的測試案例特殊,不交換測試案例也是對的。但是肯定是wrong answer
int j=i;
while(j>0&&tmpn0&&tmpl0&&tmpw
就是宣告乙個內部類,將編號,長,寬放進去。通過get,set進行修改,也是一種封裝的思想(但是乙個開始不是這樣的,貪圖方便)。尤其是插入排序,一定為涉及到陣列物件的移動的。
使用前必須例項化乙個物件先:rectangle[i]=new rectangle();
直接把它寫成:rectangle[j]=rectangle[j-1];
物件陣列存的是乙個物件引用,前面這樣先,相當於拷貝,即:兩個引用指向了同乙個物件,無論通過修改那個引用,必定會修改到同乙個物件,具體檢視:淺拷貝和深拷貝。留個**(不一定是最好的):
所以必須做出修改,通過get,set進行賦值,移動 或者用集合,暫時沒想到
rectangle[j].setnum(rectangle[j-1].getnum());
rectangle[j].setleng(rectangle[j-1].getleng());
rectangle[j].setwidth(rectangle[j-1].getwidth());
附上方法二:
public void insertsorttwo(scanner sc)
}for (int j = 0; j < longer - 1; j++) else if (num[j] == num[k] && length[j] < length[k]) else if (num[j] == num[k] && length[j] == length[k]
&& wide[j] < wide[k]) else if (num[j] == num[k] && length[j] == length[k]
&& wide[j] == wide[k]) }}
for (int j = longer - 1; j >= 0; j--) else
}} }
}
合併兩個DataSet的一種方法
需求描述 欲實現列印功能,一些記錄項,即使內容項沒有資料,也要保留其編號,並空出這一行 資料庫在採集資料時,只採集了那些內容項不為空的資料,即只有乙個包含均不為空的表。直觀想法 設計乙個和資料庫中採集到的資料的那個表結構一樣的表table2,只包含全部的 id 值,內容項由已有的table1來填充。...
JAVA兩個引用指向同乙個陣列
在這段程式中,arrayb是通過arraya賦值得到的,並不是new出來的,所以他們內部儲存的位址值是一樣,他們指向的是同乙個陣列。注 陣列在程式執行當中,長度是不能改變的。arraya與arrayb即為引用。可以理解為c語言中的指標,都是儲存乙個記憶體位址值,指向一塊記憶體。引用與指標的區別 1....
劍指Offer Python 合併兩個排序的鍊錶
題目 合併兩個排序的鍊錶 輸入兩個單調遞增的鍊錶,輸出兩個鍊錶合成後的鍊錶,當然我們需要合成後的鍊錶滿足單調不減規則。思路 因為兩個鍊錶是有序的,將其合併,用到了雙指標合併的方法。大致步驟 設定兩個指標分別指向兩個鍊錶的頭部,定義乙個新的鍊錶。比較兩個指標結點大小,將較小結點插入新煉表中,然後繼續向...