Как найти минимум трех целых чисел

Skip to content

Задача «Минимум из трех чисел»

Условие

Даны три целых числа. Выведите значение наименьшего из них.

Решение задачи от разработчиков на Python:

Другие интересные реализации задачи:

Смотреть видео — Задача «Минимум из трех чисел» решение на Python

Делитесь с друзьями ссылкой на ответ и задавайте вопросы в комментариях! 👇

Related Posts

Посмотреть все комментарии

wpDiscuz

0

Оставьте комментарий! Напишите, что думаете по поводу статьи.x
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's user avatar

Kromster

13.5k12 золотых знаков43 серебряных знака72 бронзовых знака

задан 7 ноя 2018 в 19:28

Bek Murat's user avatar

3

спасибо за помощь, но у меня получилось читабельнее))

if (a < b){
    min = a;
}else{
    min = b;
}

if (min > c){
    min = c;
}

ответ дан 8 ноя 2018 в 22:50

Bek Murat's user avatar

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

slippyk's user avatar

slippykslippyk

6,1013 золотых знака19 серебряных знаков38 бронзовых знаков

4

Добавить комментарий