稍稍注意一下 int 和 double 的混合运算,基本功不扎实真的很致命。
这题的确很水……就是解一个方程组并限制一下约束条件而已。
$$\begin{cases} x = a + b \ y = a + c \ z = y + b + c \ \end{cases} $$
约束条件是:
$$\begin{cases} a > 0 \ b > 0 \ c > 0 \ \end{cases} $$
由于b、c是无关变量,我们希望把它们化成别的变量,即:
$$\begin{cases} a > 0 \ x > a \ y > a \ \end{cases} $$
满足上面这组约束条件时,输出:
$$a = y + \frac{x-z}{2}$$
下面是 C 语言代码:
#include <stdio.h> int main() { int x, y, z; scanf("%d%d%d", &x, &y, &z); double a = y + (x - z) / 2.0; if (a > 0 && x > a && y > a) printf("%lf\n", a); else printf("Wrong\n"); }
顺便码一个rust:
fn main() { use std::io; use std::io::Read; let mut buf = String::new(); io::stdin().lock().read_to_string(&mut buf).unwrap(); let mut buf = buf.split_whitespace(); let x: f64 = buf.next().unwrap().parse().unwrap(); let y: f64 = buf.next().unwrap().parse().unwrap(); let z: f64 = buf.next().unwrap().parse().unwrap(); let a = y + (x - z) / 2.0; if a > 0.0 && x > a && y > a { println!("{}", a); } else { println!("Wrong"); } }
吐槽一下rust的异常安全机制……在OJ题的方面上写起来就啰嗦许多。
坑爹呢。。。没想到是大写的W!害我提交了好几次!!!
稍稍注意一下 int 和 double 的混合运算,基本功不扎实真的很致命。
这题的确很水……就是解一个方程组并限制一下约束条件而已。
$$\begin{cases}
x = a + b \
y = a + c \
z = y + b + c \
\end{cases}
$$
约束条件是:
$$\begin{cases}
a > 0 \
b > 0 \
c > 0 \
\end{cases}
$$
由于b、c是无关变量,我们希望把它们化成别的变量,即:
$$\begin{cases}
a > 0 \
x > a \
y > a \
\end{cases}
$$
满足上面这组约束条件时,输出:
$$a = y + \frac{x-z}{2}$$
下面是 C 语言代码:
顺便码一个rust:
吐槽一下rust的异常安全机制……在OJ题的方面上写起来就啰嗦许多。
坑爹呢。。。没想到是大写的W!害我提交了好几次!!!