长方形排序
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;}
相关文章推荐
- DNN结构演进History—CNN
- 【Win10应用开发】自定义打印选项
- Android-用户提醒Notification
- 基因发现算法
- 遍历子视图的子视图
- validate验证+jquery+ajax提交表单
- 关于android WebViewClient的方法解释
- 【Android开发】多媒体应用开发-使用SoundPool播放音频
- 支付宝异步回调
- CNNs添加一尺度不变特征-神经元层
- jquery easyui的dialog href的参数传递问题
- linux下静默方式安装oracle
- 软测验点---平衡二叉树
- log4j
- jenkins的使用
- css样式修改(扣页面的核心技术)
- Facebook的开源系列
- Redhat 5.8 ORACLE 11gR2 RAC安装文档2-grid安装
- 阅读《构建之法》13-17章
- jsp页面input默认不可编辑table切换光标问题