一种排序
时间限制: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
*/
1 #include<stdio.h> 2 int main() 3 { 4 int l[10000],k[10000],h[10000],j,i,n,m,t,b; 5 scanf("%d",&n); 6 while(n--) 7 { 8 scanf("%d",&m); 9 for(i=0;i<m;i++) 10 { 11 scanf("%d%d%d",&h[i],&l[i],&k[i]);//将长宽调换 12 if(k[i]>l[i]) {t=k[i];k[i]=l[i];l[i]=t;} 13 } 14 for(i=0;i<m-1;i++) 15 { 16 for(j=0;j<m-1-i;j++) 17 { 18 if(h[j]>h[j+1])//编号排序 19 { 20 t=h[j];h[j]=h[j+1];h[j+1]=t; 21 t=l[j];l[j]=l[j+1];l[j+1]=t; 22 t=k[j];k[j]=k[j+1];k[j+1]=t; 23 } 24 } 25 } 26 for(i=0;i<m-1;i++) 27 { 28 for(j=0;j<m-1-i;j++) 29 { 30 if(h[j]==h[j+1]&&l[j]>l[j+1])// 第二层排序 31 { 32 t=h[j];h[j]=h[j+1];h[j+1]=t; 33 t=l[j];l[j]=l[j+1];l[j+1]=t; 34 t=k[j];k[j]=k[j+1];k[j+1]=t; 35 } 36 } 37 } 38 for(i=0;i<m-1;i++) 39 { 40 for(j=0;j<m-1-i;j++) 41 { 42 if(h[j]==h[j+1]&&l[j]==l[j+1]&&k[j]>k[j+1])// 第三层排序 43 { 44 t=h[j];h[j]=h[j+1];h[j+1]=t; 45 t=l[j];l[j]=l[j+1];l[j+1]=t; 46 t=k[j];k[j]=k[j+1];k[j+1]=t; 47 } 48 if(h[j]==h[j+1]&&l[j]==l[j+1]&&k[j]==k[j+1])// 编号、长、宽都相同,就只保留一个长方形用于排序,删除多余的长方形 49 { 50 for(b=j;b<m-1-i;b++) // 51 { 52 h[b]=h[b+1]; 53 l[b]=l[b+1]; 54 k[b]=k[b+1]; 55 } 56 j--; 57 m--; 58 } 59 } 60 } 61 for(i=0;i<m;i++) 62 printf("%d %d %d ",h[i],l[i],k[i]); 63 } 64 return 0; 65 }