题解:洛谷 P5706 再分肥宅水
【题目来源】
【题目描述】
现在有 \(t\) 毫升肥宅快乐水,要均分给 \(n\) 名同学。每名同学需要 \(2\) 个杯子。现在想知道每名同学可以获得多少毫升饮料(严格精确到小数点后 \(3\) 位),以及一共需要多少个杯子。
【输入】
输入一个实数 \(t\) 和一个正整数 \(n\),使用空格隔开。
【输出】
输出两行。
第一行输出一个三位小数,表示可以获得多少毫升饮料。第二行输出一个正整数,表示一共需要多少个杯子。
【输入样例】
500.0 3
【输出样例】
166.667
6
【核心思想】
-
问题分析:给定 \(t\) 毫升肥宅快乐水和 \(n\) 名同学,要求均分。每名同学需要 \(2\) 个杯子。求每名同学获得的饮料量(精确到小数点后 \(3\) 位)和总杯子数。
-
算法选择:
- 直接计算:饮料量 = \(t / n\),杯子数 = \(n \times 2\)
- 格式化输出:使用
printf的%.3f控制浮点数保留三位小数
-
关键步骤:
- 读入数据:
cin >> t >> n读取总量和人数 - 计算平均值:
avg = t / n浮点数除法 - 计算杯子数:
sum = n * 2整数乘法 - 格式化输出:
printf("%.3f\n%d", avg, sum)%.3f:保留三位小数输出avg\n:换行%d:输出整数sum
- 读入数据:
-
时间/空间复杂度:
- 时间复杂度:\(O(1)\),单次除法和乘法
- 空间复杂度:\(O(1)\),仅需四个变量
-
格式化输出的核心思想:
- 浮点精度控制:
printf的%.3f自动进行四舍五入到三位小数,无需手动处理 - 混合类型输出:
printf支持同一格式字符串中多种类型占位符,简化多行输出 - 问题分解:将"均分"和"杯子数"两个独立计算分别处理,无耦合关系
- 适用于基础算术运算、格式化输出类入门问题
- 浮点精度控制:
【算法标签】
入门 #模拟
【代码详解】
#include <bits/stdc++.h> // 包含标准库头文件(万能头文件)
#include <iomanip> // 包含输入输出操纵符库(用于格式化输出)
using namespace std; // 使用标准命名空间
/**
* 主函数 - 程序入口
* @return 程序执行状态码(0表示成功)
*/
int main()
{
double t, avg; // 定义双精度浮点数:总量t,平均值avg
int n, sum; // 定义整型变量:份数n,双倍份数sum
cin >> t >> n; // 从标准输入读取总量t和份数n
avg = t / n; // 计算每份的平均值(浮点数除法)
sum = n * 2; // 计算双倍份数(整数乘法)
// 输出结果(使用printf实现格式化输出)
printf("%.3f\n%d", avg, sum); // %.3f表示保留3位小数,\n换行,%d输出整数
return 0; // 返回程序执行成功状态码
}
【运行结果】
500.0 3
166.667
6
浙公网安备 33010602011771号