三次调用 max3 代入公式后浮点除法,%.3f 保留三位小数输出。
OJ: roj
题目 ID: 1152
难度:入门
标签:入门语法函数浮点数python
创建: 2026-09-29 21:02
更新: 2026-10-05 03:45
题目描述
给定三个数
输入:一行三个数 1 2 3:分子 0.200。
思路
按公式逐字代入:分子用函数版 max3 拿返回值,两个分母因子用过程版 max3_proc(C++ 用引用/全局输出参数模拟 Pascal 的 var 参数)写出结果。注意 1.0* 把整数除法抬成浮点除法,最后 printf("%.3f") 四舍五入保留三位小数即可,整体
参考代码
Python 版:
python
#!/usr/bin/env python3
# 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-09-29 21:05
# update_at: 2026-09-29 21:05
import sys
def max3(x: int, y: int, z: int) -> int:
"""函数版求三个数的最大值:把结果作为返回值交回给调用者。"""
top = x
if top < y:
top = y
if top < z:
top = z
return top
def max3_proc(x: int, y: int, z: int, out: list[int]) -> None:
"""过程版求三个数的最大值:没有返回值,结果写进输出参数 out[0]。"""
top = x
if top < y:
top = y
if top < z:
top = z
out[0] = top
def solve() -> None:
a, b, c = map(int, sys.stdin.read().split())
numerator = max3(a, b, c) # 分子 max(a, b, c):用函数版拿返回值
out: list[int] = [0] # 过程版的输出参数(相当于 Pascal 的 var 参数)
max3_proc(a + b, b, c, out)
left = out[0] # 分母左因子 max(a+b, b, c)
max3_proc(a, b, b + c, out)
right = out[0] # 分母右因子 max(a, b, b+c)
m = numerator / (left * right)
print(f"{m:.3f}")
if __name__ == "__main__":
solve()C++ 版(同一算法):
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-10-05 03:45
* update_at: 2026-10-05 03:45
*/
#include <cstdio>
#include <algorithm>
using namespace std;
typedef long long ll;
// 求三个数的最大值(题面要求定义成函数,用返回值交回结果)
ll max3(ll x, ll y, ll z) {
ll top = x;
if (top < y) top = y;
if (top < z) top = z;
return top;
}
ll a, b, c; // 输入的三个数
ll out_proc; // 过程版的输出参数(用全局变量模拟 Pascal 的 var 参数)
// 求三个数的最大值(题面要求定义成过程,无返回值,结果写进输出参数)
void max3_proc(ll x, ll y, ll z) {
ll top = x;
if (top < y) top = y;
if (top < z) top = z;
out_proc = top;
}
int main() {
scanf("%lld %lld %lld", &a, &b, &c);
// 分子:max(a,b,c),用函数版的返回值
ll numerator = max3(a, b, c);
// 分母左因子:max(a+b, b,c),用过程版的输出参数
max3_proc(a + b, b, c);
ll left = out_proc;
// 分母右因子:max(a, b, b+c),再用一次过程版
max3_proc(a, b, b + c);
ll right = out_proc;
// 1.0 * 抬成浮点除法,防止整数除法丢小数
double m = 1.0 * numerator / (left * right);
printf("%.3f\n", m);
return 0;
}