您的位置:首页 > 其它

长方形排序

2015-06-18 18:30 239 查看

一种排序

时间限制: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
#include <stdio.h>#include <stdlib.h>//用结构体保存数据typedef struct rectangle {int sequence;int chang;int wide;int flag;  //标记重复的}RECT;//排序,这里用交换指针的地址来排序void paixu( RECT *p,RECT *q){RECT *t;t=(RECT *)malloc(sizeof(RECT));*t=*p;*p=*q;*q=*t;free(t);}int main(){int n,m,i,j,x,y;//中间或临时变量RECT *Rect[1000];scanf("%d",&n);while(n--){scanf("%d",&m);for(i=0;i<m;i++){Rect[i] = (RECT *)malloc(sizeof(RECT));//动态分配内存用于保存输入的值scanf("%d %d %d",&Rect[i]->sequence,&x,&y);if( x > y )   //将大的作为长方形的长{Rect[i]->chang = x;Rect[i]->wide = y;}else{Rect[i]->chang = y;Rect[i]->wide = x;}}for(i=0;i<m;i++)Rect[i]->flag = 1;   //标志初始化,默认为没有需要丢弃的for(i=0;i<m-1;i++)   //循环比较for(j=i+1;j<m;j++){   //前面的序号大,并且没有废弃的数据if(Rect[i]->sequence > Rect[j]->sequence && Rect[i]->flag && Rect[j]->flag){paixu(Rect[i],Rect[j]);continue;}else if( !Rect[i]->flag ) //如果前面一个数是废弃的数,直接进行下一轮比较break;else if( ! Rect[j]->flag) //如果后一个数是废弃的数,则跳过去,继续和下一个比较continue;else if(Rect[i]->sequence == Rect[j]->sequence)  //序号相等时比较长{if(Rect[i]->chang > Rect[j]->chang){paixu(Rect[i],Rect[j]);continue;}else if(Rect[i]->chang == Rect[j]->chang)  //长相等时比较宽{if(Rect[i]->wide > Rect[j]->wide){paixu(Rect[i],Rect[j]);continue;}else if(Rect[i]->wide == Rect[j]->wide )  //宽相等时将其中一个数据废弃Rect[i]->flag = 0;}}}//end for(j=i+1;...)for(i=0;i<m;i++)  //输出{if( !(Rect[i]->flag) )continue;printf("%d %d %d \n",Rect[i]->sequence,Rect[i]->chang,Rect[i]->wide);}for(i=0;i<m;i++)  //释放内存free(Rect[i]);}//end while(n--)return 1;}  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: