京东 · Shell 编程 · 算法编程题
京东 Shell 编程 时限 1 秒 / 256 MB

题目描述

体重指数 = 体重 (kg) / ( 身高 (m) × 身高 (m) ),小于 18.5 属于偏瘦,介于 18.5 和 20.9 之间(左闭右开)属于苗条,介于 20.9 和 24.9 之间(左闭右闭)属于适中,超过 24.9 属于偏胖。
请你编写一个 Shell 程序,输入某人的身高和体重,计算这个人的体重指数并判断这个人的身材状态(偏瘦、苗条、适中、偏胖)。
输入:某人的身高(m)和用户的体重(kg),中间使用空格隔开
输出:该人的身材状态(偏瘦、苗条、偏胖)

样例共 3 组

样例 1
输入
1.75 62.5
输出
苗条
样例 2
输入
1.5 40
输出
偏瘦
样例 3
输入
1.85 80
输出
适中

算法解析依据充分

考点:Shell 文本处理

限制 1 秒 / 256MB | Shell 脚本题

题目画像

  • 源站时限:1 秒(牛客口径,非本题专属门槛)

解题思路

本题是 Shell 文本处理题:给定一个文本文件 nowcoder.txt,要求用 shell 命令完成指定的文本变换或统计。

建议步骤

  1. 先确认要处理的字段与分隔符(题面样例会给出,通常是空格分隔;有表头时记得用 NR>1 跳过)。
  2. 选工具:按字段处理用 awk,逐行变换用 while read,简单替换用 sed,筛选行用 grep
  3. 输出格式必须与样例严格一致:分隔符、行数、是否保留表头、是否需要行号。

常用命令速查

  • 取某几列:awk '{print $1, $2}' nowcoder.txt
  • 跳过表头:awk 'NR>1{...}'
  • 全局替换:sed 's/old/new/g'
  • 按条件筛选并带行号:grep -n "pattern"
  • 按单词长度过滤:awk '{for(i=1;i<=NF;i++) if(length($i)>5) print $i}'
  • 行列转换:awk '{for(i=1;i<=NF;i++) a[i]=a[i]" "$i} END{for(i=1;i<=NF;i++) print a[i]}'
  • 脱敏替换:sed -E 's/([0-9]{3})[0-9]{4}([0-9]{4})/****/g'

易错点

  • 表头行没跳过(或样例本要求保留却跳过了)。
  • 分隔符是连续多个空格时,cut -d" " 会切出空字段,改用 awk 更稳。
  • 替换忘加 g,只替换了每行的第一处。

解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。

本题来源:2024年春招-京东-技术通用岗位-第三批笔试。

‹ 上一题 全部编程题 下一题 ›
编程算法题为只读内容:无需作答,直接看题与解析 · 本站不提供在线判题 · 解析由校招宝本地引擎整理,非官方题解