按身高和体重排队,运动会(C 语言)

news/2024/7/24 7:48:36 标签: c语言, 算法, 数据结构, 华为od

题目

某学校举行运动会,学生们按编号(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;
}

文章目录

    • 题目
    • 输入
    • 输出
    • 示例一
      • 输入
      • 输出
    • 示例二
      • 输入
      • 输出
    • 代码


http://www.niftyadmin.cn/n/5389317.html

相关文章

NLP主要研究哪些方向?

当前AI炽手可热&#xff0c;NLP是AI的一个重要方向。NLP&#xff08;Natural Language Processing&#xff0c;自然语言处理&#xff09;&#xff0c;致力于让计算机能够理解、解释和处理人类语言。NLP 的目标是使计算机能够像人类一样处理和理解自然语言的文本和语音数据。NLP…

台式电脑无法进桌面问题

楼主家里的台式电脑有一段时间进不了桌面&#xff0c;一度很困扰。 最开始发现有一个存储盘没有显示&#xff0c;拆开主机盖&#xff0c;把显卡、内存、硬盘都重新往紧压了下。重新开机后&#xff0c;显示器还是黑的。 表现为主机启动的声音正常&#xff0c;显示器没有信号接…

设计模式-工厂方法模式(C++)

工厂方法模式&#xff08;Factory Method Pattern&#xff09;是一种创建型设计模式&#xff0c;它定义了一个用于创建对象的接口&#xff0c;但将实际的对象创建过程延迟到子类中。这种模式解耦了具体产品的创建过程&#xff0c;使得系统更加灵活和可扩展。 下面是一个使用 C…

如何通过Jenkins进行自动化构建项目

1. 介绍 Jenkins 是一个开源的持续集成&#xff08;CI&#xff09;和持续交付&#xff08;CD&#xff09;工具&#xff0c;旨在自动化软件开发过程中的构建、测试和部署。它是一个基于 Java 编写的自动化服务器&#xff0c;在软件开发生命周期的各个阶段提供自动化支持。 官方…

力扣226 翻转二叉树 Java版本

文章目录 题目描述解题思路代码 题目描述 给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 示例 1&#xff1a; 输入&#xff1a;root [4,2,7,1,3,6,9] 输出&#xff1a;[4,7,2,9,6,3,1] 示例 2&#xff1a; 输入&#xff1a;root…

危险!Wyze 摄像头安全漏洞致1.3万用户隐私遭窥探

最近&#xff0c;一则关于 Wyze 摄像头再次出现安全漏洞的新闻引起了人们的广泛关注。据报道&#xff0c;该安全漏洞导致约1.3万用户的摄像头受到了未经授权的访问&#xff0c;使得这些用户的隐私信息遭到了窥视。这一事件再次引发了人们对网络安全的关注和讨论。 网络安全不仅…

jvm-jvm七款经典垃圾收集器

一&#xff0c;七款经典垃圾收集器 七款经典的垃圾收集器&#xff1a; 收集器串行、并行or并发新生代/老年代算法目标适用场景Serial串行新生代复制算法响应速度优先单CPU环境下的Client模式Serial Old串行老年代标记-整理响应速度优先单CPU环境下的Client模式、CMS的后备预案…

基于支持向量机的航迹追踪,基于支持向量机的航迹追踪,基于SVM的航迹矫正

目录 支持向量机SVM的详细原理 SVM的定义 SVM理论 Libsvm工具箱详解 简介 参数说明 易错及常见问题 完整代码和数据下载链接:基于支持向量机的航迹追踪,基于支持向量机的航迹追踪,基于SVM的航迹矫正(代码完整,数据齐全)资源-CSDN文库 https://download.csdn.net/downloa…