Skip to content

M31184: 一道题搞懂输出 ​

http://cs101.openjudge.cn/practice/31184/

使用 sys.stdin.read().split() 一次性读入所有数据,能够有效避免换行、多余空格对读取造成的干扰,随后根据 mode 的值进入对应的输出分支。

Python 参考代码

python
import sys

def main():
    tokens = sys.stdin.read().split()
    if not tokens:
        return
    
    mode = int(tokens[0])
    
    if mode == 1:
        # 输出 x 的绝对值
        x = int(tokens[1])
        print(abs(x))
        
    elif mode == 2:
        # 同一行输出,空格分隔
        a, b, c = map(int, tokens[1:4])
        print(a + b, b + c, a + c)
        
    elif mode == 3:
        # 分别占一行输出
        a, b, c = map(int, tokens[1:4])
        print(a + b)
        print(b + c)
        print(a + c)
        
    elif mode == 4:
        # 使用指定分隔符 "->"
        a, b, c = tokens[1:4]
        print(a, b, c, sep="->")
        
    elif mode == 5:
        # 每个整数后紧跟一个 '#',包括最后一个
        n = int(tokens[1])
        nums = tokens[2:2 + n]
        print("".join(f"{x}#" for x in nums))
        
    elif mode == 6:
        # 从大到小排序后,以空格分隔输出列表元素
        n = int(tokens[1])
        nums = [int(x) for x in tokens[2:2 + n]]
        nums.sort(reverse=True)
        print(*nums)
        
    elif mode == 7:
        # 格式化字符串拼接输出,无空格
        a, b = map(int, tokens[1:3])
        print(f"{a}*{b}={a * b}")
        
    elif mode == 8:
        # 浮点数除法并保留恰好 3 位小数
        a, b = map(int, tokens[1:3])
        print(f"{a / b:.3f}")
        
    elif mode == 9:
        # 英文逗号分隔序列,末尾无逗号
        n = int(tokens[1])
        nums = tokens[2:2 + n]
        print(*nums, sep=",")

if __name__ == "__main__":
    main()

知识点解析与对应用法

  1. 绝对值计算:abs(x)。
  2. 多变量同行输出:print(a, b, c),默认以空格分隔。
  3. 分行输出:调用多次 print(),每次默认会在末尾输出换行符 \n。
  4. 自定义分隔符:print(a, b, c, sep="->"),通过 sep 参数设定项之间的连接符。
  5. 连续拼接输出:使用 "".join(f"{x}#" for x in nums) 或 print(x, end="#") 修改结尾字符。
  6. 解包列表并按空格输出:print(*nums),通过 * 解包避免了直接打印列表时带有的方括号 []。
  7. f-string 拼接表达式:f"{a}*{b}={a * b}",在花括号内可直接嵌入运算。
  8. 保留指定小数位数:f"{x:.3f}",即使末尾为 0 也会补齐至三位小数。
  9. 解包并指定分隔符:print(*nums, sep=","),能保证元素间以逗号分隔且最后一个元素后不会带有逗号。