c语言疑点结构体,结构体的小疑点

结构体的小问题

题目:

Students

实验任务

一份杂乱无序的学生名单,请你按照班级和序号升序排列。

数据输入

第一行 N,代表有几位学生。(N <= 10000)

接下来 N 行,每行为 class_number, number, name,表示学生的班级,序号,

姓名。(没有两人班级和序号均相同)

(班级和序号为 1,2,3,4..,学生姓名长度不超过 10)

数据输出

输出有序的名单,每行一条学生的信息。

班级的我排好了,我不知道如何在班级排好的情况下排序号。。。

答案要这样:输入示例

3

1 2 a

2 1 c

1 1 b

输出示例

1 1 b

1 2 a

2 1 c

------解决思路----------------------

if (a.class_number> b.class_number

------解决思路----------------------

(a.class_number==b.class_number && a.number>b.number)) {

//TODO:交换a,b

//

}

------解决思路----------------------

这位朋友,不知道你的数据结构是如何实现,就我对你描述的需求的理解,你貌似要求输出的样子是首先班级号是有序的,其次在同一个班级号中,序号是有序的。

那么小弟拙见,我觉得没必要排两次,你可以这样,把班级号和序号组合成一个数,假如班级号和序号最多都到99,那么班级号11,序号23可以组合为1123,同理,班级号3,序号17可以组合为0317(即317),然后你再对这个组合数进行排序,不是很简单而且只需要排一次。等排完了,你再把组合数拆开再去打印即可。

不过,只是基于我对于此需求的理解,如果理解错了,这个方法就没用了。

------解决思路----------------------

引用:Quote: 引用:这里肯定有个主要的参考字段,假设你将班级号当主要参考,那么只有当两组数据的班级号相同时,你才需要去比较他们的序号(按升序排),否侧就是根据班级号来升序排的!

反过来假如你将序号当主要参考,那么也是类似的!

ps:假如这里没有啥主次之分,那就需要你自己定义一个根据班级号和序号排序的算法

班级号是主要参考,排好班级以后要排班级里面同学的序号,我不知道该怎么排

给个简单示例,你参考下吧,主要就是compare_student()函数

#include 

using namespace std;

struct Student

{

int ClassNumber;

int Number;

char Name[20];

};

int compare_student(Student a,Student b)//定义比较大小的函数,a>b返回1,a=b返回0,a

{

if(a.ClassNumber==b.ClassNumber)

{

return a.Number>b.Number?1:(a.Number==b.Number?0:-1);

}

else

{

return a.ClassNumber>b.ClassNumber?1:-1;

}

}

void sort_student(Student* pStudent,int num)

{

Student temp;

for(int i=0;i

{

for(int j=i;j

{

if(compare_student(pStudent[j],pStudent[j+1])==1)

{

temp=pStudent[j];

pStudent[j]=pStudent[j+1];

pStudent[j+1]=temp;

}

}

}

}

void print_student(Student* pStudent,int num)

{

for(int i=0;i

{

cout<

}

}

void main()

{

Student students[4];

for(int i=0;i<4;++i)

{

sprintf(students[i].Name,"%s%d","name",i+1);

}

students[0].ClassNumber=1;

students[0].Number=4;

students[1].ClassNumber=1;

students[1].Number=3;

students[2].ClassNumber=2;

students[2].Number=3;

students[3].ClassNumber=3;

students[3].Number=2;

sort_student(students,4);

print_student(students,4);

}

175525231.jpg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值