- Постановка задачи
- Входные и выходные данные
- Выбор структуры данных
- Алгоритм
- Программа
- Анализ правильности решения
Программа на вход получает четыре различных числа. Нужно вывести на экран число, которое больше одного и меньше двух других чисел.
Данную задачу можно разделить на 2 подзадачи: нахождение минимального числа и нахождение второго минимального числа.
На вход программа должна получать 4 числа, при этом в условии сказано, что они целые,
но не сказаны ограничения этих чисел, поэтому будем считать, что они принадлежат типу данный long
.
Тип | min значение | max значение | |
---|---|---|---|
A (Число 1) | целое число | -263 | 263 -1 |
B (Число 2) | целое число | -263 | 263 -1 |
C (Число 3) | целое число | -263 | 263 -1 |
D (Число 4) | целое число | -263 | 263 -1 |
Так как программа должна вывести второе по счету в отсортерованном списке по возрастанию, то на выходе мы получим число лежащее в диапозоне от: -263 до: 263 -1
Тип | min значение | max значение | |
---|---|---|---|
X | целое число | -263 | 263 -1 |
Программа получает 4 целый числа, с неуказанными ограничениями, поэтому для их
хранения можно выделить 4 переменных (a
, b
, c
, d
) типа long
.
-
Ввод данных: Программа считывает четыре целых числа, обозначенные как:
a
,b
,c
,d
. -
Нахождение второго минимума:
Программа находит минимальное число изa
,b
,c
,d
. Пример: пустьa
- минимальное, тогда программа ищет минимальное изb
,c
,d
. Соответсвенно то же самое и для других букв -
Вывод результата: На экран выводится второй минимальный элемент.
graph TD
A([Начало]) --> B[/Ввести: a, b, c, d/]
B --> C{a < b && a < c && a < d}
C -- Да --> D{b < c && b < d}
D -- Да --> D1[/Вывод: b/]
D -- Нет --> E{c < b && c < d}
E -- Да --> E1[/Вывод: c/]
E -- Нет --> E2[/Вывод: d/]
C -- Нет --> R{b < a && b < c && b < d}
R -- Да --> T{a < c && a < d}
T -- Да --> T1[/Вывод: a/]
T -- Нет --> Y{c < a && c < d}
Y -- Да --> Y1[/Вывод: c/]
Y -- Нет --> Y2[/Вывод: d/]
R -- Нет --> U{c < a && c < b && c < d}
U -- Да --> I{a < b && a < d}
I -- Да --> I1[/Вывод: a/]
I -- Нет --> O{b < a && b < d}
O -- Да --> O1[/Вывод: b/]
O -- Нет --> O2[/Вывод: d/]
U -- Нет --> P{a < b && a < c}
P -- Да --> P1[/Вывод: a/]
P -- Нет --> S{b < a && b < c}
S -- Да --> S1[/Вывод: b/]
S -- Нет --> S2[/Вывод: c/]
D1 --> Z([Конец])
E1 --> Z([Конец])
E2 --> Z([Конец])
T1 --> Z([Конец])
Y1 --> Z([Конец])
Y2 --> Z([Конец])
I1 --> Z([Конец])
O1 --> Z([Конец])
O2 --> Z([Конец])
P1 --> Z([Конец])
S1 --> Z([Конец])
S2 --> Z([Конец])
import java.io.PrintStream;
import java.util.Scanner;
public class j_1{
// Объявляем объект класса Scanner для ввода данных
public static Scanner in = new Scanner(System.in);
// Объявляем объект класса PrintStream для вывода данных
public static PrintStream out = System.out;
public static void main (String [] args) {
// Считывание четырех целых чисел a, b, c, d из консоли
Scanner scanner = new Scanner(System.in);
long a = scanner.nextLong(), b = scanner.nextLong();
long c = scanner.nextLong(), d = scanner.nextLong();
if (a < b && a < c && a < d){
// a - наименьшее
if (b < c && b < d) out.println(b);
else if (c < b && c < d) out.println(c);
else out.println(d);
}
else if (b < a && b < c && b < d) {
// b - наименьшее
if (a < c && a < d) out.println(a);
else if (c < a && c < d) out.println(c);
else out.println(d);
}
else if (c < a && c < b && c < d) {
// c - наименьшее
if (a < b && a < d) out.println(a);
else if (b < a && b < d) out.println(b);
else out.println(d);
}
else {
// d - наименьшее
if (a < b && a < c) out.println(a);
else if (b < a && b < c) out.println(b);
else out.println(c);
}
}
}
Программа работает корректно на всем множестве решений с учетом ограничений.
-
Тест на
D > C > B > A > 0
:-
Input:
4 3 2 1
-
Output:
2
-
-
Тест на
A < B < C < D < 0
:-
Input:
-5 -4 -3 -1
-
Output:
-4
-
-
Тест на
A > B > 0; C < D < 0
:-
Input:
10 8 -7 -2
-
Output:
-2
-
-
Тест на ограничение задачи:
-
Input:
34359738368 34359738369 34359738370 34359738371
-
Output:
34359738369
-