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)
上一题
下一题