一種排序
時間限制:3000?ms ?|? 內存限制:65535?KB
難度:3
- 描述
- 現在有很多長方形,每一個長方形都有一個編號,這個編號可以重復;還知道這個長方形的寬和長,編號、長、寬都是整數;現在要求按照一下方式排序(默認排序規則都是從小到大);
1.按照編號從小到大排序
2.對于編號相等的長方形,按照長方形的長排序;
3.如果編號和長都相同,按照長方形的寬排序;
4.如果編號、長、寬都相同,就只保留一個長方形用于排序,刪除多余的長方形;最后排好序按照指定格式顯示所有的長方形;- 輸入
- 第一行有一個整數 0<n<10000,表示接下來有n組測試數據;
每一組第一行有一個整數 0<m<1000,表示有m個長方形;
接下來的m行,每一行有三個數 ,第一個數表示長方形的編號,
第二個和第三個數值大的表示長,數值小的表示寬,相等
說明這是一個正方形(數據約定長寬與編號都小于10000); 輸出 - 順序輸出每組數據的所有符合條件的長方形的 編號 長 寬 樣例輸入
-
1 8 1 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 1 1 2 1 1 2 2 2 1 1 2 2 1
- 第一行有一個整數 0<n<10000,表示接下來有n組測試數據;
#include "stdio.h"
#define N 1000+10
int a[N][3];int main()
{int n,m;int i,j,temp; scanf("%d",&n);while(n--){scanf("%d",&m);for(i=1;i<=m;i++){scanf("%d%d%d",&a[i][0],&a[i][1],&a[i][2]);//讀入數據 if(a[i][1]<a[i][2]) {temp=a[i][1];a[i][1]=a[i][2];a[i][2]=temp;} //糾正讀入數據的格式先長后寬 } //刪除重復的元素組 ,通過與最后一組元素互換然后數據組數減一,特別注意此時要檢查互換后的數據組是否重復 for(i=2;i<=m;i++){ for(j=1;j<i;j++){if(a[i][0]==a[j][0] && a[i][1]==a[j][1] && a[i][2]==a[j][2]){a[i][0]=a[m][0]; a[i][1]=a[m][1]; a[i][2]=a[m][2]; m--; i--; break;} } } //類似冒泡對元素組進行排序 for(i=1;i<=m;i++){ for(j=m;j>i;j--){if(a[j][0]<a[i][0] || (a[j][0]==a[i][0]&&a[j][1]<a[i][1]) || (a[j][0]==a[i][0] && a[j][1]==a[i][1] && a[j][2]<a[i][2]) ){ temp=a[i][0];a[i][0]=a[j][0];a[j][0]=temp; temp=a[i][1];a[i][1]=a[j][1];a[j][1]=temp; temp=a[i][2];a[i][2]=a[j][2];a[j][2]=temp;}} } for(i=1;i<=m;i++) //打印結果 printf("%d %d %d\n",a[i][0],a[i][1],a[i][2]);}return 0;
}