Задача.
Даны действительные числа [latex] x, y, z [/latex]. Получить [latex]\max\left\{x,y,z \right\}[/latex].
Тесты.
Ввод | Вывод |
0 0 0 | 0 |
-1 2 3 | 3 |
1 3.4 2.2 | 3.4 |
-3.5 0 2.1 | 2.1 |
-1.9 -7 0 | 0 |
-3.4 -2 -1.8 | -1.8 |
Код.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
#include <iostream> using namespace std; int main() { double x,y,z,max; scanf("%lf %lf %lf", &x, &y, &z); if (x <= y) { // Вычисляем max{x,y} max = y; } else { max = x; } if (max <= z) { // Если max{x,y} <= z, то max{x,y,z} = max{max{x,y},z} = z; max = z; // В противном случае max{x,y,z} = max{max{x,y},z} = max{x,y} } printf("max{%4.2lf,%4.2lf,%4.2lf} = %4.2lf \n",x,y,z,max); return 0; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
import java.util.*; import java.lang.*; import java.io.*; class Ideone { public static void main (String[] args) throws java.lang.Exception { Scanner in = new Scanner(System.in); double x, y, z, max; x = in.nextDouble(); y = in.nextDouble(); z = in.nextDouble(); if (x <= y) max = y; else max = x; if (max <= z) max = z; System.out.format("max{%.2f, %.2f, %.2f} = %.2f\n", x, y, z, max); } } |
Решение.
1) Как известно, для любых чисел [latex] x,y \in \mathbb{R} [/latex] [latex] \max\left\{x,y \right\} = x,[/latex] если [latex] x \geq y[/latex], и [latex] \max\left\{x,y \right\} = y,[/latex] в противном случае.
2) Нетрудно доказать, что [latex] \forall x,y,z \in \mathbb{R} [/latex] [latex] \max\left\{x,y,z \right\}=\max\left\{\max\left\{x,y \right\},z \right\}[/latex]
3) С учётом замечания 1), вычислим [latex] \max\left\{x,y\right\}[/latex] и поместим полученное значение в переменную [latex] \max [/latex]
4) С учётом замечаний 1) и 2), если [latex] max \geq z [/latex], то [latex] \max\left\{x,y,z \right\} = z[/latex]. В противном случае, [latex] \max\left\{x,y,z \right\} = \max[/latex].
Основательно сделали.
Придётся зачесть.
Только добавьте ссылку на код в IDEone.
Но всё равно, использовать условный оператор вместо условного выражения это расточительство.