c语言-一道C语言用结构体排序的题目 大神快来帮我理解下人家的代码~~~

问题描述

一道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之类的类似
它到底是什么数据类型,在之前定义结构体的时候定义的呀。

时间: 2024-11-05 13:43:51

c语言-一道C语言用结构体排序的题目 大神快来帮我理解下人家的代码~~~的相关文章

函数指针 c语言 指针-C语言 在函数里给结构体赋值

问题描述 C语言 在函数里给结构体赋值 求懂的人解释一下,谢谢 代码意思是想在传结构体指针给函数,在函数里面改变结构体各项的值,运行结果为:a和b的值能改变,但到打印指针c的时候,程序报错 #include struct stu { int a; int b; char *c; }; //给结构体s1初始化 void Fun(void *ptr) { char *s = (char *)malloc(10); s = "Hello World"; int *p = (int *)ptr

c语言-C语言函数的形参(结构体类型)和实参类型(指针)可以不同吗?

问题描述 C语言函数的形参(结构体类型)和实参类型(指针)可以不同吗? int numstus; int lens; student pointer; void main() { int i=1; char str[2]; lens=100; pointer=(student *)malloc(lens*LEN); /分配内存*/ numstus=0; welcome(); /*欢迎界面*/ while(i>0) { i=menu_select(); /*控制菜单*/ switch(i) { c

详解Swift语言中的类与结构体_Swift

类在 Swift 中类是建立灵活的构建块.类似于常量,变量和函数,用户可以定义的类的属性和方法.Swift给我们提供了声明类,而无需用户创建接口和实现文件的功能.Swift 允许我们创建类作为单个文件和外部接口,将默认在类一次初始化来创建. 使用类的好处: 继承获得一个类的属性到其他类 类型转换使用户能够在运行时检查类的类型 初始化器需要处理释放内存资源 引用计数允许类实例有一个以上的参考 类和结构的共同特征: 属性被定义为存储值 下标被定义为提供访问值 方法被初始化来改善功能 初始状态是由初始

内存管理-一道编程题用c语言实现这些功能时间有限1天时间求大神解答

问题描述 一道编程题用c语言实现这些功能时间有限1天时间求大神解答 有用户空间100kb,并规定作业的相应程序浇入内存连续区域,并不能被移动.作业与进程均采用sjf算法.输入为一组作业的进入时间,需要的内存容量(不超过100k)和运行时间. 要求: (1)按时间顺序给出每个作业的执行顺序,开始时间和结束时间,以及发生调度时内存各分区的状态: (2)计算这组作业的平均周转时间和平均带权周转时间: (3)实现作业一级调度和进程一级调度,包括调度算法和数据结构: (4)实现动态分区内存管理,包括内存分

c语言-C语言版非递归马踏棋盘·死循环了·求大神解答·小弟新手求助

问题描述 C语言版非递归马踏棋盘·死循环了·求大神解答·小弟新手求助 这是出现死循环的代码bool solution(Move move, Pos &beginPos){ if(!move) { printf("solution Failed!"); return false; } int chessBoard[8][8] = {0}; push(move, beginPos); chessBoard[beginPos.mX][beginPos.mY] = 1; int ste

编程c语言-用c语言带入已知数求多项式,这样不对,求大神解答

问题描述 用c语言带入已知数求多项式,这样不对,求大神解答 已知y0,y1,y3,y4,x0,x1,求abcd然后再求h,这样写对吗,不对应该怎么写 解决方案 最后的printf%s都改成%f 解决方案二: 输入值后没反应,怎么回事 解决方案三: 换行输入试试,弹出后换行.. 解决方案四: 你的abcdh的类型是float,输出float类型的变量要用%f,%s是输出字符串类型的 解决方案五: 最后格式符用错了,s是字符串的,应该用f.还有main实际是不规范的,尽量写int main吧,加个返

java语言如何用数组解这道题? 只需大神指点一下关键要点……

问题描述 java语言如何用数组解这道题? 只需大神指点一下关键要点-- java 修改标签 [问题描述] 用一维数组存储学号和成绩,然后,按成绩排序输出. [输入形式] 输入第一行包括一个整数N(1<=N<=100),代表学生的个数. 接下来的N行每行包括两个整数p和q,分别代表每个学生的学号和成绩. [输出形式] 按照学生的成绩从小到大进行排序,并将排序后的学生信息打印出来. 如果学生的成绩相同,则按照学号的大小进行从小到大排序. [样例输入] 3 1 90 2 87 3 92 [样例输出

求大神来解决-C语言算法问题,矩阵排序。求大神

问题描述 C语言算法问题,矩阵排序.求大神 一个N*N的矩阵,现在求一个高效的算法.例如一个3*2的矩阵,将矩阵中某个元素的值变为他在矩阵中所有元素的有大到小排序的位置(序号,比如图中元素7的值最大,所以就让他变为1).现在有3W*3W=9亿的矩阵,怎么处理最高效,基本算法就不要说了,现在就是要解决算法不够高效的问题.谁有好的思路可以提一下么?求大神 解决方案 这就是一个最简单的排序问题,数据用二维数组装的.别被矩阵唬住了.排序问题的算法已经被研究烂了,教材里有的是,我就不赘述了 解决方案二:

printf-c语言求最小公倍数 求大神帮我理解下这个代码

问题描述 c语言求最小公倍数 求大神帮我理解下这个代码 #includeint main(){? ?int mnik=1;? ?scanf(""%d %d""&m&n);? ?for(i=1;i<=m;i++)? ?{? ? ? ?if(m%i==0 && n%i==0)? ? ? ?{? ? ? ? ? ?k*=i;? ? ? ? ? ?m/=i;? ? ? ? ? ?n/=i;? ? ? ?}? ? ? ?if(m==1 |