2026年6月GESP真题及题解(C++四级):身高体重指数

在这里插入图片描述

题目描述

一个人的身高体重指数(BMI)等于其体重(千克为单位)除以其身高(米为单位)的平方。

例如,一个体重为 50  kg 50\text{ kg} 50 kg,身高为 1.6  m 1.6\text{ m} 1.6 m 的人的身高体重指数为 50  kg / 1.6  m / 1.6  m = 19.53125  kg/m 2 50\text{ kg}/1.6\text{ m}/1.6\text{ m} = 19.53125\text{ kg/m}^2 50 kg/1.6 m/1.6 m=19.53125 kg/m2

现在有 n n n 个小朋友,第 i i i 个小朋友的编号为 i i i,体重为 w i w_i wi,身高为 h i h_i hi

请按照身高体重指数从高到低为小朋友们排序,数据保证不存在两个小朋友的身高体重指数完全相同。输出排序后小朋友的编号。

输入格式

输入 3 3 3 行,

第一行为一个正整数 n n n,表示小朋友的个数;

第二行为 n n n 个整数 w 1 , w 2 , ⋯   , w n w_1, w_2, \cdots, w_n w1,w2,,wn 表示小朋友们的体重,单位为 kg \text{kg} kg

第三行为 n n n 个浮点数 h 1 , h 2 , ⋯   , h n h_1, h_2, \cdots, h_n h1,h2,,hn 表示小朋友们的身高,单位为 m \text{m} m

输出格式

输出一行 n n n 个数,表示按照身高体重指数从高到低排序后的编号。

输入输出样例 1
输入 1
3
45 33 39
1.55 1.33 1.44
输出 1
3 1 2
说明/提示
样例解释

三个小朋友(编号依次为 1 1 1 2 2 2 3 3 3)的身高体重指数分别为(保留两位小数的结果): 18.73 18.73 18.73 18.66 18.66 18.66 18.81 18.81 18.81,故排序后输出的编号为 3   1   2 3\ 1\ 2 3 1 2

数据范围

1 ≤ n ≤ 1000 1 \le n \le 1000 1n1000 10 ≤ w i ≤ 100 10 \le w_i \le 100 10wi100 0.8 ≤ h i ≤ 1.9 0.8 \le h_i \le 1.9 0.8hi1.9 h i h_i hi 均恰有两位小数。

思路分析

  1. 问题转化
    对每个小朋友(编号从 1 开始)计算 BMI = 体重 / 身高²,然后按 BMI 从高到低排序,输出对应编号。
    题目保证所有 BMI 值互不相同,因此排序时无需处理相等情况。

  2. 数据存储

    • 体重为整数,身高为浮点数(两位小数)。
    • 由于输入先给所有体重再给所有身高,需先保存体重数组。
    • 读入每个身高时立即计算 BMI,并将编号与 BMI 存入结构体数组。
  3. 排序方法
    使用 sort 配合自定义比较函数,按 BMI 降序排列。

  4. 输出格式
    依次输出排序后的编号,每个编号后跟一个空格(末尾多余空格不影响评测)。

  5. 复杂度

    • 时间:O(n log n),n ≤ 1000。
    • 空间:O(n)。

代码实现

#include <bits/stdc++.h> 
using namespace std;

int n; 
int w[1010]; // 体重数组
struct node{
    int id; 
    double b;
}a[1005]; // 编号与BMI

bool cmp(node x, node y){
    return x.b > y.b; // 降序比较
} 

int main() {
    cin >> n; 
    for (int i = 1; i <= n; i++) cin >> w[i]; 
    
    double h; // 临时身高变量
    for (int i = 1; i <= n; i++) {
        cin >> h; // 读入身高
        a[i].id = i; // 记录编号
        a[i].b = w[i] / (h * h); // 计算BMI
    }
    
    sort(a + 1, a + n + 1, cmp); // 按BMI降序排序
    
    for (int i = 1; i <= n; i++) {
        cout << a[i].id << " "; // 输出编号
    }
    return 0;
}

功能分析

  • 输入处理:从标准输入读取 n、体重序列和身高序列。
  • 计算逻辑:使用浮点除法得到精确 BMI 值,无精度损失。
  • 排序稳定性:比较函数直接返回降序,确保排序结果唯一。
  • 输出:按顺序输出编号,每个编号后带空格。

各种学习资料,助力大家一站式学习和提升!!!

#include<bits/stdc++.h>
using namespace std;
int main(){
	cout<<"##########  一站式掌握信奥赛知识!  ##########";
	cout<<"#############  冲刺信奥赛拿奖!  #############";
	cout<<"######  课程购买后永久学习,不受限制!   ######";
	return 0;
}

【秘籍汇总】(完整csp信奥赛C++学习资料):

1、csp/信奥赛C++,完整信奥赛系列课程(永久学习):

https://edu.csdn.net/lecturer/7901 点击跳转

在这里插入图片描述

2、CSP信奥赛C++竞赛拿奖视频课:

https://edu.csdn.net/course/detail/40437 点击跳转
在这里插入图片描述
https://edu.csdn.net/course/detail/41081 点击跳转
在这里插入图片描述

3、csp信奥赛高频考点知识详解及案例实践:

CSP信奥赛C++动态规划:
https://blog.csdn.net/weixin_66461496/category_13096895.html点击跳转

CSP信奥赛C++标准模板库STL:
https://blog.csdn.net/weixin_66461496/category_13108077.html 点击跳转

信奥赛C++提高组csp-s知识详解及案例实践:
https://blog.csdn.net/weixin_66461496/category_13113932.html 点击跳转

4、csp信奥赛冲刺一等奖有效刷题题解:

信奥赛C++普及组CSP-J一等奖通关刷题题单及题解:
https://blog.csdn.net/weixin_66461496/category_12673810.html 点击跳转

信奥赛C++普及组csp-j初赛&复赛真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12808781.html 点击跳转

信奥赛C++提高组csp-s初赛&复赛真题题解(持续更新):
https://blog.csdn.net/weixin_66461496/category_13125089.html 点击跳转

5、GESP C++考级真题题解:

在这里插入图片描述

GESP(C++ 一级+二级+三级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12858102.html 点击跳转

在这里插入图片描述

GESP(C++ 四级+五级+六级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12869848.html 点击跳转

在这里插入图片描述
GESP(C++ 七级+八级)真题题解(持续更新):
https://blog.csdn.net/weixin_66461496/category_13117178.html 点击跳转

· 文末祝福 ·

#include<bits/stdc++.h>
using namespace std;
int main(){
	cout<<"跟着王老师一起学习信奥赛C++";
	cout<<"    成就更好的自己!       ";
	cout<<"  csp信奥赛一等奖属于你!   ";
	return 0;
}

在这里插入图片描述

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐