问题描述
- 一道C语言用结构体排序的题目 大神快来帮我理解下人家的代码~~~
-
描述
小王是公司的仓库管理员,一天,他接到了这样一个任务:从仓库中找出一根钢管。这听起来不算什么,但是这根钢管的要求可真是让他犯难了,要求如下:
1、 这根钢管一定要是仓库中最长的;
2、 这根钢管一定要是最长的钢管中最细的;
3、 这根钢管一定要是符合前两条的钢管中编码最大的(每根钢管都有一个互不相同的编码,越大表示生产日期越近)。
相关的资料到是有,可是,手工从几百份钢管材料中选出符合要求的那根……
要不,还是请你编写个程序来帮他解决这个问题吧。
输入
第一行是一个整数N(N<=10)表示测试数据的组数)
每组测试数据的第一行 有一个整数m(m<=1000),表示仓库中所有钢管的数量,
之后m行,每行三个整数,分别表示一根钢管的长度(以毫米为单位)、直径(以毫米为单位)和编码(一个9位整数)。
输出
对应每组测试数据的输出只有一个9位整数,表示选出的那根钢管的编码,
每个输出占一行
样例输入
2
2
2000 30 123456789
2000 20 987654321
4
3000 50 872198442
3000 45 752498124
2000 60 765128742
3000 45 652278122
样例输出
987654321
752498124看到一个代码是这样子的:
#include
#include
#include
#include
using namespace std;
struct m
{
int a;//长度
int b;//直径
int c;//编号
} s[1001];
bool cmp1(m x,m y)
{
//长度大到小排序
return x.a>y.a;
}
bool cmp2(m x,m y)
{
//半径小到大排序
return x.b
}
bool cmp3(m x,m y)
{
//编码从大到小排序
return x.c>y.c;
}
int main()
{
int N;
scanf("%d",&N);
while(N--)
{
int n;//钢管数量
scanf("%d",&n);
int i,j=0,k=0;
for(i=0; i<n; i++)
scanf("%d%d%d",&s[i].a,&s[i].b,&s[i].c);
sort(s,s+n,cmp1);
for(i=0; i<n; i++)
if(s[i].a==s[0].a)
j++;
sort(s,s+j,cmp2);
for(i=0; i<j; i++)
if(s[i].b==s[0].b)
k++;
sort(s,s+k,cmp3);
printf("%dn",s[0].c);
memset(s,0,sizeof(s));
}
return 0;
}然后就是不太理解那个cmp函数那块 bool类型的函数在括号里的m是什么意思呢
不定义bool类型的话,定义成int那结构体还能实现排序吗?
解决方案
m就是定义的结构体类型。不定义bool也可以实现排序,不要求很严谨的话这个返回值类型可以定义成int等。
解决方案二:
int的话可以用1代表true 0代表false
解决方案三:
那个m就是结构体啊,结构体就相当于数据类型和int、bool、char之类的类似
它到底是什么数据类型,在之前定义结构体的时候定义的呀。