一种排序
来源:互联网 发布:万能mac地址修改器下载 编辑:程序博客网 时间:2024/05/21 10:10
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这题感觉不难,也没有坑,但是自己可能对cmp函数掌握的不是太好吧,以前总是排序一次就好,这题需要考虑三种情况,而且三种情况都有关联,所以第一时间想到的是写三个cmp函数,cmp1比较编号,cmp2比较长,cmp3比较宽,但后来感觉行不通,这题就先放着的,然后写别的题的时候,看到别人博客上有一题的代码也是用排序,也是需要多种排序,然后才感觉自己考虑问题太复杂了,然后借鉴学习了一下,套用在这题上,原先的排序是:
bool cmp(book m,book n)
{
if(m.x>n.x)
return m.x<n.x;
else
{
if(m.length>n.length)
return m.length<n.length;
else
return m.wide<n.wide;
}
}测试数据过了,自己也感觉没错但还是wa了,其实我这还是证明我对这个函数的排序理解的不透彻,重新改了一下,详情见下面代码部分,为了更好的理解这个函数,我特别请教了一个大神,让他给我想两组数据,帮我理解,这两组数据在这里和大家分享一下,有和我一样不太理解的,可以自己测试理解一下。
433 1 12 2 21 3 331 3 11 2 21 1 3
#include <iostream>
#include<stdio.h>
#include<algorithm>
#include<math.h>
using namespace std;
struct book{
int length,wide,x;
}s[1010];//定义一个结构体,存储每个长方形的信息,为了方便后面排序
bool cmp(book m,book n)//排序,自己结合上面有bug的函数理解一下
{
if(m.x!=n.x)
return m.x<n.x;
else
{
if(m.length!=n.length)
return m.length<n.length;
else
return m.wide<n.wide;
}
}
int main()
{
int a,b,i,t;
scanf("%d",&a);
while(a--)
{
scanf("%d",&b);
for(i=0;i<b;i++)
{
scanf("%d %d %d",&s[i].x,&s[i].length,&s[i].wide);
if(s[i].length<s[i].wide)//同一每组的长宽的位置
{
t=s[i].length;
s[i].length=s[i].wide;
s[i].wide=t;
}
}
sort(s,s+b,cmp);//排好序
for(i=0;i<b;i++)
{//如果此长方形和下一个长方形的信息都一样,则不输出这个
if((s[i].x==s[i+1].x)&&(s[i].length==s[i+1].length)&&(s[i].wide==s[i+1].wide))
continue;
else
printf("%d %d %d\n",s[i].x,s[i].length,s[i].wide);
}
}
return 0;
}
- 一种排序
- 一种排序
- 一种排序
- 一种排序
- 一种排序
- 一种排序
- 一种排序
- 一种排序
- 一种排序
- 一种排序
- 一种排序
- 一种排序
- 一种排序
- 一种排序
- 一种排序
- 一种排序
- 一种排序
- 一种排序
- MongoDB的安装与使用(Win7 64位)
- 【SQL】连接(四)完全连接
- 写一个程序判断当前系统存储模式是大端还是小端
- 安卓Service详解,你需要知道的一切,这一篇就够了
- (HTML)学了<a>新标签的简单试验
- 一种排序
- JAVA中接口的一个实例
- sklearn中digits手写字体数据集介绍
- 一维条形码CODE128编码及字符集CODE A、B、C解析
- 使用ssh公钥实现免密码登录
- Multiple substitutions specified in non-positional format;did you mean to add the formatted="false"
- swift iOS 不执行deinit的原因
- linux进程内存分段
- linux patch 命令小结