本文主要是介绍按身高和体重排队,运动会(C 语言),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目
某学校举行运动会,学生们按编号(1、2、3.....n)
进行标识,
现需要按照身高由低到高排列,
对身高相同的人,按体重由轻到重排列,
对于身高体重都相同的人,维持原有的编号顺序关系。
请输出排列后的学生编号
输入
两个序列,每个序列由N个正整数组成,(0 < n <= 100)
。
第一个序列中的数值代表身高,第二个序列中的数值代表体重。
输出
排列结果,每个数据都是原始序列中的学生编号,编号从1
开始。
示例一
输入
4
100 100 120 130
40 30 60 50
输出
2 1 3 4
示例一
输入
3
90 110 90
45 60 45
输出
1 3 2
代码
#include <stdio.h>
#include <stdlib.h>
typedef struct {int id; // 学生编号int height; // 学生身高int weight; // 学生体重
} Student;// 定义比较函数,用于qsort排序。根据题目要求,先按身高由低到高排序,
// 身高相同时按体重由轻到重排序,体重再相同时维持原有的编号顺序关系。
int cmp(const void *a, const void *b) {Student *s1 = (Student *)a;Student *s2 = (Student *)b;// 比较身高,若身高不同则按照身高大小返回结果if (s1->height != s2->height) {return s1->height - s2->height;}// 身高相同的情况下,比较体重,若体重不同则按照体重大小返回结果else if ((s1->height == s2->height) && (s1->weight != s2->weight)) {return s1->weight - s2->weight;}// 当身高和体重都相同时,保持原始编号顺序,即按照id从小到大排序else {return s1->id - s2->id;}
}int main() {int n; // 学生人数scanf("%d", &n); // 读取学生人数// 初始化学生结构体数组Student stu[100];for (int i = 0; i < n; i++) {stu[i].id = i + 1; // 学生编号从1开始scanf("%d", &stu[i].height); // 读取学生的身高信息}// 读取学生的体重信息for (int i = 0; i < n; i++) {scanf("%d", &stu[i].weight);}// 使用qsort进行排序,传入学生结构体数组、学生数量、单个元素大小及比较函数qsort(stu, n, sizeof(Student), cmp);// 输出排序后学生的编号for (int i = 0; i < n; i++) {printf("%d ", stu[i].id);}return 0;
}
这篇关于按身高和体重排队,运动会(C 语言)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!