题解:洛谷 B4062 温度转换
【题目来源】
洛谷:B4062 [GESP202412 一级] 温度转换 - 洛谷(luogu.com.cn)
【题目描述】
小杨最近学习了开尔文温度、摄氏温度和华氏温度的转换。令符号 \(K\) 表开尔文温度,符号 \(C\) 表摄氏温度,符号 \(F\) 表华氏温度,这三者的转换公式如下:
\(C=K−273.15\)
\(F=C×1.8+32\)
现在小杨想编写一个程序计算某一开尔文温度对应的摄氏温度和华氏温度,你能帮帮他吗?
【输入】
一行,一个实数 \(K\),表示开尔文温度。
【输出】
一行,若输入开尔文温度对应的华氏温度高于 \(212\),输出 Temperature is too high!;
否则,输出两个空格分隔的实数 \(C\) 和 \(F\),分别表示摄氏温度和华氏度,保留两位小数。
【输入样例】
412.00
【输出样例】
Temperature is too high!
【核心思想】
-
问题分析:给定开尔文温度 \(K\),需要转换为摄氏温度 \(C\) 和华氏温度 \(F\),并根据华氏温度是否超过 \(212\) 决定输出内容。这是一个公式计算 + 条件判断问题,核心在于正确应用温度转换公式并处理浮点数精度输出。
-
算法选择:
- 直接公式计算:按给定公式依次计算 \(C\) 和 \(F\)
- 条件分支输出:根据 \(F\) 与 \(212\) 的大小关系选择输出内容
-
关键步骤:
- 读入数据:读取实数 \(K\)
- 温度转换:
- \(C \leftarrow K - 273.15\)
- \(F \leftarrow C \times 1.8 + 32\)
- 条件判断与输出:
- 若 \(F > 212\):输出
Temperature is too high! - 否则:输出 \(C\) 和 \(F\),保留两位小数
- 若 \(F > 212\):输出
-
时间/空间复杂度:
- 时间复杂度:\(O(1)\)
- 空间复杂度:\(O(1)\)
-
公式计算与浮点输出的核心思想:
- 链式转换:先由开尔文转摄氏,再由摄氏转华氏,利用中间变量 \(C\) 避免重复计算,保证公式正确性
- 浮点数比较:直接使用 \(F > 212\) 进行判断,由于输入和公式均为简单运算,浮点精度误差在可接受范围内
- 格式化输出:使用
printf("%.2lf", ...)控制输出精度,确保结果保留两位小数,符合题目要求 - 适用于基础物理公式计算、条件分支输出类入门问题
【算法标签】
入门 #语法基础
【代码详解】
#include <bits/stdc++.h>
using namespace std;
double k; // 定义变量k,表示输入的绝对温度(单位:开尔文)
int main() {
cin >> k; // 输入绝对温度k
double c = (k - 273.15); // 将开尔文温度转换为摄氏温度
double f = c * 1.8 + 32; // 将摄氏温度转换为华氏温度
// 判断华氏温度是否超过212度
if (f > 212) {
cout << "Temperature is too high!" << endl; // 输出提示信息
} else {
printf("%.2lf %.2lf\n", c, f); // 输出摄氏温度和华氏温度,保留两位小数
}
return 0;
}
【运行结果】
412.00
Temperature is too high!
浙公网安备 33010602011771号