长方形排序
来源:互联网 发布:angularjs保存数据 编辑:程序博客网 时间:2024/04/29 18:56
一种排序
时间限制:3000 ms | 内存限制:65535 KB
难度:3
- 描述
- 现在有很多长方形,每一个长方形都有一个编号,这个编号可以重复;还知道这个长方形的宽和长,编号、长、宽都是整数;现在要求按照一下方式排序(默认排序规则都是从小到大);
1.按照编号从小到大排序
2.对于编号相等的长方形,按照长方形的长排序;
3.如果编号和长都相同,按照长方形的宽排序;
4.如果编号、长、宽都相同,就只保留一个长方形用于排序,删除多余的长方形;最后排好序按照指定格式显示所有的长方形;- 输入
- 第一行有一个整数 0<n<10000,表示接下来有n组测试数据;
每一组第一行有一个整数 0<m<1000,表示有m个长方形;
接下来的m行,每一行有三个数 ,第一个数表示长方形的编号,
第二个和第三个数值大的表示长,数值小的表示宽,相等
说明这是一个正方形(数据约定长宽与编号都小于10000); - 输出
- 顺序输出每组数据的所有符合条件的长方形的 编号 长 宽
- 样例输入
181 1 11 1 11 1 21 2 11 2 22 1 12 1 22 2 1
- 样例输出
1 1 11 2 11 2 22 1 12 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; }
0 0
- 长方形排序
- 长方形排序
- 长方形排序
- 一种排序《长方形》
- 长方形去重排序
- 长方形
- 最小长方形
- 最小长方形
- 最大长方形
- 画长方形
- Qual_B:长方形
- 长方形个数
- picture(长方形)
- 最小长方形
- 最小长方形
- 最小长方形
- 最小长方形
- 长方形问题
- 遍历子视图的子视图
- 【Android开发】多媒体应用开发-使用VideoView播放视频
- 用过的协议和device
- Android-用户提醒Notification
- 知名卸载软件Revo Uninstaller Pro挑战Deep Freeze卸载动画视频教程
- 长方形排序
- cocos2d-x 数学函数、常用宏粗整理
- safari 模拟手机显示
- 01.ios之路-ready go!
- 【Linux 内核网络协议栈源码剖析】af_inet.c——INET Socket层(2)
- Python python2和python3的安装及切换使用
- linux下音频设备DSP
- Android-只有2个圆角的ImageView
- 日语学习之沪江N3基础 20150618 -5