【深基2.例8】再分肥宅水

GitHub跳转原题关系图返回列表

用浮点除法计算每人饮料量,并用格式化字符串保留三位小数。

OJ: luogu

题目 ID: P5706

难度:入门

标签:python入门输入输出数学

日期: 2026-07-15 17:56

题意

tt 毫升饮料,平均分给 nn 名同学。输出每名同学能得到多少毫升,保留 33 位小数;再输出一共需要多少个杯子。每名同学需要 22 个杯子。

思路

每人得到的饮料量是 t / n,杯子总数是 n * 2。这题的关键不在计算,而在输出格式:第一行必须固定显示三位小数。

brute.py 不适合这题,因为直接公式就是完整解法,没有需要枚举验证的算法过程。

Python 知识

  • input().split() 得到两个字符串 token。
  • float(t) 把饮料总量转成浮点数,int(n) 把人数转成整数。
  • f"{value:.3f}" 表示保留小数点后 33 位输出,会按常规规则四舍五入。
  • 多行输出可以连续调用两次 print()

对应的本地 Python 笔记:

  • /home/rainboy/mycode/hugo-blog/content/program_language/python/input_output_and_strings.mdfloatint、一行多值输入。
  • /home/rainboy/mycode/hugo-blog/content/program_language/python/oj_input_output_cheatsheet.md:控制浮点数小数位数和多行输出。

代码

python
t, n = input().split()
t = float(t)
n = int(n)

print(f"{t / n:.3f}\n{n * 2}", end="")
cpp
/**
 * Author by Rainboy blog: https://rainboylv.com github: https://github.com/rainboylvx
 * rbook: -> https://rbook.roj.ac.cn  https://rbook2.roj.ac.cn
 * rainboy的学习导航网站: https://idx.roj.ac.cn
 * create_at: 2026-07-27 00:00
 * update_at: 2026-07-27 00:00
 */

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

int main() {
    double t; // 饮料总量(毫升)
    int n;    // 同学人数
    cin >> t >> n;
    // 第一行:每人分到的饮料,保留 3 位小数
    printf("%.3f\n", t / n);
    // 第二行:每人需要 2 个杯子,共需要 n * 2 个
    cout << n * 2 << endl;
    return 0;
}

Pythonic 写法

f-string:

python
t, n = input().split()
print(f'{float(t) / int(n):.3f}\n{int(n) * 2}', end='')

复杂度

只做常数次运算,时间复杂度 O(1)O(1),空间复杂度 O(1)O(1)

总结

浮点题先看清楚题目要求“保留几位小数”。Python 的 f-string 格式化可以直接表达这个输出要求。