测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A18659. 身高体重指数

填空题 较难

题目描述

身高体重指数

题目描述

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

例如,一个体重为 50kg, 身高为 1.6m 的人的身高体重指数为 50 kg/ 1.6m / 1.6m = 19.53125 kg/m2

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

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

输入格式

输入 3 行,

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

第二行为 n 个整数 w₁,w₂,⋯,wₙ 表示体重;

第三行为 n 个浮点数 h₁,h₂,⋯,hₙ 表示小朋友们的身高,单位为米。

输出格式

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

输入样例

3
45 33 39
1.55 1.33 1.44

输出样例

3 1 2

样例解释

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

数据范围

1 ≤n ≤1000,10 ≤wi ≤100,0.8 ≤ hi ≤1.9 , hi均恰有两位小数。

参考答案

# 读取小朋友个数 n = int(input()) # 读取体重和身高 w = list(map(int, input().split())) h = list(map(float, input().split())) data = [] # 把小朋友们的编号和bmi指数打包在一个tuple放到列表里面 for i in range(n): bmi = w[i] / h[i] / h[i] data.append((bmi, i + 1)) # 按 BMI(即每个元组的第 0 号元素)降序排序 data.sort(reverse=True) # 输出排序后的编号 res = [str(item[1]) for item in data] print(' '.join(res))

答案解析

# 同学总数
n = int(input())
# 同学们的体重
w = list(map(int, input().split()))
# 同学们的身高
h = list(map(float, input().split()))
ids = list(range(1, n + 1))
# 冒泡排序
for i in range(n):
    for j in range(1, n - i):
        # 计算相邻两位同学bmi
        bmi1 = w[j - 1] / h[j - 1] / h[j - 1]
        bmi2 = w[j] / h[j] / h[j]
        if bmi1 < bmi2:
            # 交换体重、身高、编号
            w[j - 1], w[j] = w[j], w[j - 1]
            h[j - 1], h[j] = h[j], h[j - 1]
            ids[j - 1], ids[j] = ids[j], ids[j - 1]
print(*ids)


上一题 下一题