Skip to content
Задача «Минимум из трех чисел»
Условие
Даны три целых числа. Выведите значение наименьшего из них.
Решение задачи от разработчиков на Python:
Другие интересные реализации задачи:
Смотреть видео — Задача «Минимум из трех чисел» решение на Python
Делитесь с друзьями ссылкой на ответ и задавайте вопросы в комментариях! 👇
Related Posts
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
/* Verevkin, dev-c++ */ //#include <iostream> <-- раскомментить, если надо #include <stdlib.h> #include <stdio.h> #include <conio.h> #include <time.h> #define RAND_X(a, b) (a + rand() % (b - a)) #define A -10 #define B +10 #define MAX2(a, b) ((a > b) ? a : b) #define MIN2(a, b) ((a < b) ? a : b) #define MAX3(a, b, c) MAX2(a, MAX2(b, c)) #define MIN3(a, b, c) MIN2(a, MIN2(b, c)) int main(int argc, char** argv) { int a, b, c; srand(time(0)); do { a = RAND_X(A, B); b = RAND_X(A, B); c = RAND_X(A, B); printf(" %3d | %3d | %3d | min = %3d | max = %3dn", a, b, c, MIN3(a, b, c), MAX3(a, b, c)); } while (getch() != 27); return 0; } |
Здравствуйте, дорогие друзья. Сегодня мы напишем программу по вводу трёх чисел с клавиатуры и определению, какое из них самое большое, какое наименьшее и какое среднее. На нашем канале мы уже писали похожую стать об определении максимального числа между двумя числами, однако у начинающих программистов часто вызывают трудности работа именно с тремя числами, и особенно определение среднего числа. Внимательно смотрим на скриншот:
А теперь запускаем программу, вводим любые три числа и смотрим на результат:
Вот такую вот не сложную, но очень полезную программу мы сегодня с вами написали. На этом у меня на сегодня всё. Также предлагаю подписаться на наш Ютуб-канал ПиМ [ZveKa], там много интересного видео, всё увидите сами. До новых встреч на просторах Яндекс Дзена.
Ознакомьтесь с другими нашими работами по Python:
Синтаксис языка программирования Python
Программируем на Python: определяем чётность и нечётность чисел в заданной последовательности
Программируем на Python: таблица умножения
Программируем на Python: нахождение большего числа из двух чисел
Программируем на Python: перевод мер длины друг в друга
Учитывая три целых числа, найдите максимальное и минимальное число между ними, не используя условные операторы или тернарный оператор.
Подход 1: Использование короткого замыкания в логических выражениях
Идея состоит в том, чтобы воспользоваться короткое замыкание в булевых выражениях. Мы знаем, что в логическом AND
такие операции, как x && y
, y
оценивается только в том случае, если x
правда. Если x
ложно, то y
не оценивается, потому что все выражение было бы ложным, что можно вывести, даже не оценивая y
. В логических выражениях это называется коротким замыканием.
Идея состоит в том, чтобы применить этот принцип к следующему коду. Изначально, max
является a
. Если max < b
верно, значит b
больше, чем a
, поэтому второе подвыражение max = b
оценивается, и max
установлен на b
. Если, однако, max < b
ложно, то второе подвыражение не вычисляется и max
останется a
(лучше чем b
). Аналогично оценивается второе выражение.
Мы также можем реализовать функцию минимума аналогичным образом, как показано ниже на C++:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
#include <iostream> using namespace std; int maximum(int a, int b, int c) { // инициализируем `max` с помощью `a` int max = a; // установить `max` в `b` тогда и только тогда, когда `max` меньше, чем `b` (max < b) && (max = b); // это не условные операторы // установить `max` в `c` тогда и только тогда, когда `max` меньше `c` (max < c) && (max = c); // это просто логические выражения return max; } int minimum(int a, int b, int c) { // инициализируем `min` с помощью `a` int min = a; // установить `min` в `b` тогда и только тогда, когда `min` больше, чем `b` (min > b) && (min = b); // установить `min` в `c` тогда и только тогда, когда `min` больше, чем `c` (min > c) && (min = c); return min; } int main() { cout << maximum(7, 9, 4) << endl; cout << minimum(6, 3, 9) << endl; return 0; } |
Скачать Выполнить код
Подход 2: Использование индекса массива
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
#include <iostream> using namespace std; int maximum(int a, int b, int c) { // `first` будет содержать первые два элемента int first[] = { a, b }; // `second` будет содержать максимум первых двух элементов в // 0-й индекс и третий элемент с индексом 1 int second[] = { first[a < b], c }; // наконец, возвращаем максимальный элемент return second[second[0] < c]; } int minimum(int a, int b, int c) { // `first` будет содержать первые два элемента int first[] = { a, b }; // `second` будет содержать минимум первых двух элементов в // 0-й индекс и третий элемент с индексом 1 int second[] = { first[a > b], c }; // наконец, вернуть минимальный элемент return second[second[0] > c]; } int main() { cout << maximum(6, 3, 9) << endl; cout << minimum(6, 3, 9) << endl; return 0; } |
Скачать Выполнить код
Мы можем упростить описанный выше подход, разбив задачу на нахождение максимума/минимума двух чисел. Следующая программа на C++ демонстрирует это:
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 maximum(int a, int b) { int lookup[] = {a, b}; return lookup[a < b]; } int maximum (int a, int b, int c) { return maximum(a, maximum(b, c)); } int main() { cout << maximum(6, 3, 9) << endl; return 0; } |
Скачать Выполнить код
Мы можем реализовать функцию минимума аналогичным образом, как показано ниже на C++:
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 minimum(int a, int b) { int lookup[] = {a, b}; return lookup[a > b]; } int minimum(int a, int b, int c) { return minimum(a, minimum(b, c)); } int main() { cout << minimum(6, 3, 9) << endl; return 0; } |
Скачать Выполнить код
Подход 3: Использование многократного вычитания
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
#include <iostream> using namespace std; int minimum (int a, int b, int c) { int min = 0; while (a && b && c) { a—, b—, c—, min++; } return min; } int maximum (int a, int b, int c) { int max = 0; while (a > 0 || b > 0 || c > 0) { a—, b—, c—, max++; } return max; } int main() { cout << maximum(6, 3, 9) << endl; cout << minimum(6, 3, 9) << endl; return 0; } |
Скачать Выполнить код
Использованная литература: https://stackoverflow.com/questions/7074010/find-maximum-of-three-number-in-c-without-using-conditional-statement-and-ternar
Даны a, b, c. Как найти минимум из них за два сравнения?
Kromster
13.5k12 золотых знаков43 серебряных знака72 бронзовых знака
задан 7 ноя 2018 в 19:28
3
спасибо за помощь, но у меня получилось читабельнее))
if (a < b){
min = a;
}else{
min = b;
}
if (min > c){
min = c;
}
ответ дан 8 ноя 2018 в 22:50
Bek MuratBek Murat
631 серебряный знак8 бронзовых знаков
Можно совсем без сравнений:
private static int Min (int a, int b)
{
return (a + b - Math.abs(a - b)) / 2;
}
Min(Min(a, b), c);
ответ дан 9 ноя 2018 в 7:28
slippykslippyk
6,1013 золотых знака19 серебряных знаков38 бронзовых знаков
4