Напишите программу которая упорядочивает три числа от большего к меньшему

от admin

Сортировка по убыванию 3 целых числа > 0 без if и min/max функций

Вывести 3 числа в порядке убывания без использования функций, и так далее. Без max(), min(), if и прочего.

Объясняю), я сегодня делал КР по питону и я сделал через sorted, а препод сказал что можно еще проще и без if и я не могу понять, что он имел ввиду.

Без ветвления (без if ), выполняя одни и те же сравнения вне зависимости от ввода, можно отсортировать три числа a , b , c по убыванию, используя сети сортировки:

sorting network

Значения заходят слева по проводам, выходят справа. Бо́льшие значения тонут, меньшие всплывают (по вертикальным линиям — компараторам: маx вниз, min наверх). Без min, max функций можно использовать индексацию:

True == 1 and False == 0 в Питоне, поэтому выражение [on_false, on_true][condition] возвращает on_false , если condition ложно и on_true — если истинно.

Код возвращает одну из шести возможных перестановок: abc acb cab bac bca cba так чтобы значения всегда шли по убыванию: sorted([a,b,c], reverse=True) . None никогда не выбирается, так как соответствует невозможным ситуациям (при корректном операторе сравнения): c > a >= b >= c и c <= a < b < c . Тест.

Русские Блоги

Напишите программу на Java: возьмите 5 чисел и отсортируйте их от большего к меньшему

Напишите программу на Java: возьмите 5 чисел и отсортируйте их от большего к меньшему
Вот два метода: сортировка с прямым выделением и пузырьковая сортировка.
Сначала создайте родительский класс Order class

Затем создайте подкласс Order1 и напишите напрямую, чтобы выбрать сортировку

Создайте подклассы Order2 и Order3 для написания двух пузырьковых сортировок

Наконец напишите тестовый класс

Интеллектуальная рекомендация

Использование Mybatis paging assistant и General Mapper

Трансфер изhttps://blog.csdn.net/zbw18297786698/article/details/53945729/ 1. Представление Mybatis paging assistant 2. Использование Mybatis paging assistant 3. В программе Java установите параметры п.

64-битная целочисленная проблема

Название Описание Введите положительное целое число n, посчитайте количество его положительных множителей, n <= 10 ^ (12), например, когда n = 30, на выходе должно быть 8. Исходный код Анатомия Лог.

Кратко поговорим о шаблонах проектирования-мост

1. Что такое режим моста Режим моста (Bridge) отделяет абстрактную часть от части реализации, так что все они могут быть изменены независимо. Схема структуры UML выглядит следующим образом: Среди них .

Простое приложение Android Android (1)

Простое приложение Android Android (1) Во-первых, кратко Помните, — я не узнал простое приложение Android. (Операция дизайна учебной программы) Пример Пакет: Ссылка: https: //pan.baidu.com/s/1leq1owku.

Формат вывода строк Python

# В основном используют способ форматирования строки для вывода, в общем, строка в формате вывода.

Более простой способ сортировки трех чисел

Напишите программу, которая принимает на вход три целых числа и выводит числа в порядке возрастания.
Не используйте цикл / массив.

11 ответы

Примечание. Обмен изменяет значения двух переменных.

Если вы скрываете половину кода за swap() функция и делает вид, что это всего лишь 3 строчки кода; почему бы не спрятать все внутри sort3() функция и притвориться, что это только одна строка? Если вы покажете swap() функция, по крайней мере, тогда OP имеет шанс реализовать исходный код (без swap() ) превосходит (по производительности). — Брендан

Не говоря уже о том, что это даже не работает. Переменные a, b и c передаются по значению . (кроме случаев, когда swap является макросом, в этом случае, о мальчик) — Рекурсивексцептионексцептион

Назовите три переменные x , y z , затем:

Написание swap функция оставлена ​​в качестве упражнения для читателя. Подсказка: возможно, вам придется использовать указатели.

ответ дан 06 дек ’10, 15:12

ответ дан 06 дек ’10, 21:12

Математически a + b + c-lo-hi правильно, но с точки зрения вычислений это может привести к переполнению. Так что версия подкачки более безопасна. — Кристиан Улленбум

Зачем использовать МАКРОСЫ вместо обычных функций? — Jarod42

Jarod42, а почему бы и нет? — Вованиум

Подсказка: если у вас есть 3 числа, a, b и c, min (a, min (b, c)) — наименьшее, max (a, max (b, c)) — наибольшее, с учетом наименьшего и самые большие числа, третье должно быть легко найти.

ответ дан 06 дек ’10, 15:12

Если вы хотите отсортировать значения в новые внешние переменные, вы действительно можете выполнить замену без временных файлов:

Это работает, потому что последний тест подкачки действительно нужен только в том случае, если второй тест завершится успешно (в противном случае это будет просто повторение первого теста, который завершится ошибкой по определению, поскольку мы уже отсортировали эти переменные).

Благодаря этому мы можем отслеживать присвоения каждой из исходных переменных и избегать замены локальных переменных.

ответ дан 11 авг.

Да, есть способ лучше, но нужно использовать циклы и массивы.

Возможно, для вводного курса ваш ответ — это тот ответ, который они ищут.

Читать:
Напишите программу которая вводит последовательность целых чисел

Есть способы получить цикл с for / while (рекурсия, goto и т. Д.). И способы получить что-то вроде массива без индексации ( int *ptr = malloc (3 * sizeof(int)) , а затем проиндексируйте с помощью *(ptr+index) ). Но мне трудно думать, что они этого хотят.

ответ дан 06 дек ’10, 15:12

Вероятно, это не стоит того, из-за этой проблемы — я думаю, что ваш ответ с некоторыми модификациями, предложенными другими (например, замена), — это то, что ищет ваш учитель. Мои предложения заключаются в том, как добиться поведения циклов и массивов без циклов или массивов, но они отчасти не в духе вопроса, который задает ваш учитель (я думаю) — Лу Франко

Для того, чтобы найти мин, в середине и Макс из 3 значений, вы можете использовать троичный оператор. Вы можете либо выполнять всю свою работу в основной части кода, либо отделить minof3 , midof3 и maxof3 вычисления в многоразовые функции.

В случае мин и Макс вы просто делаете 2 из 3 возможных сравнений, а затем возвращаете сравнение результатов. На случай, если в середине, вы делаете то же самое, но вычисляете минимальное и максимальное из 3 значений, а затем проверяете все 3 на мин и Макс чтобы найти значение, которое не является мин or Макс. (вы можете выполнить эту часть в основной части кода без дополнительной функции, объявив минимальные и максимальные значения как переменные и выполнив там исключение).

Собрав части вместе, вы можете сделать что-то вроде следующего, в котором в качестве значений для сортировки используются первые 3 аргумента (или используются значения по умолчанию 99, 231, 8 если необходимое значение не указано)

Пример использования / вывода

(да, я знаю, что это старый пост, но, учитывая недавний комментарий о коде, скрытом за swap функции, полный пример был в порядке).

Простой способ сортировки трех чисел

напишите программу, которая получает три целых числа в качестве входных и выводит числа в порядке возрастания.
Не используйте цикл / массив.

9 ответов

Примечание: Swap изменяет значения двух переменная.

вызовите три переменные x , y и z , тогда:

подсказка: если у вас есть 3 числа, a, b и c, min(a, min(b, c)) является наименьшим, max(a, max(b, c)) является наибольшим, и учитывая наименьшие и наибольшие числа, должно быть легко найти третий.

Да, есть гораздо лучший способ, но вы должны использовать циклы и массивы.

наверное, вводный курс, ваш ответ-это ответ, который они ищут.

есть способы получить цикл с for / while (рекурсия, goto и т. д.). И способы получить что-то вроде массива без индексации ( int *ptr = malloc (3 * sizeof(int)) , а затем проиндексировать с *(ptr+index) ). Но мне трудно поверить, что они этого хотят.

найти мин, mid и Макс 3 значений, вы можете использовать троичная оператора. Вы можете либо выполнить всю свою работу в основной части кода, либо отделить minof3 , midof3 и maxof3 вычисления в многоразовые функции.

в случае мин и Макс вы просто делаете 2 из 3 возможных сравнений, а затем возвращаете сравнение результатов. В случае mid, вы делаете то же самое, но вычисляете min и max из 3 значений, а затем проверяете все 3 против мин и Макс для того, чтобы найти значение, которое не является ни мин или Макс. (вы можете сделать эту часть в основной части вашего кода без дополнительной функции, объявив значения min и max в качестве переменных и сделав исключение там).

складывая кусочки вместе, вы можете сделать что — то похожее на далее, который принимает первые 3 аргумента в качестве значений для сортировки (или использует значения по умолчанию 99, 231, 8 если необходимое значение не указано)

Пример Использования/Выход

(да, я знаю, что это старый пост, но учитывая недавний комментарий о коде, скрытом за

Если вы хотите отсортировать значения в новые внешние переменные, вы можете фактически сделать свопы без временных:

это работает, потому что последний тест подкачки действительно нужен только в случае успеха второго теста (в противном случае это будет просто повторение первого теста, который потерпит неудачу по определению, так как мы уже отсортировали эти переменные).

из-за этого мы можем отслеживать назначения каждой из исходных переменных и избегать локальных подкачек.

Я пытался решить ту же проблему сегодня. Может сделать эту компактную версию кода без использования временных переменных; циклов; библиотечных функций, таких как swap, sort, max, min и т. д. Код использует только операторы if и производит непрерывные мутации в иерархии до тех пор, пока не будут проверены все возможности.

Если мы ищем минимальное количество сравнений как наиболее эффективное решение для сортировки 3 элементов, следуйте ниже реализации

Похожие статьи