Форум OlegON > Компьютеры и Программное обеспечение > Операционные системы и программное обеспечение > Программирование

Прикольные задачки - предложите решения на своих языках программирования : Программирование

21.11.2024 12:00


14.02.2023 15:18
Решение принимаются с кодом!

Наткнулся на простенькую тестовую задачу, сходу не решил. Дано два числа a и b. Найти наибольшее из них не используя операторы сравнения и функции типа Max, Min? Учитываем так же отработку различных особенностей... Например моя прожка отражает решение:

14.02.2023 15:24
// JavaScript
// Задача: Сделать сумму всех чисел от 0 до 10.

let sum = 0;

for(let i=0; i<=10; i++){
sum += i;
}

console.log(sum); // Результат: 55
14.02.2023 15:30
Так устроит: sign(a-b) ?
14.02.2023 15:37
Невнятно описал задачу в теме и тексте, в итоге Капитан предложил просто прикольную на его взгляд задачку. При четкой постановке он мне нарисовал гораздо более интересное:
Код:
<?php
function get_max($a, $b) {
    $c = $a - $b;
    $k = ($c >> 31) & 0x1;
    return $a - $k * $c;
}
$a = 5;
$b = 10;
echo get_max($a, $b);
?>
В этом коде мы используем битовые операции для определения, какое из чисел $a и $b больше. Операция ($c >> 31) предназначена для вычисления старшего бита числа $c, который показывает, больше ли число $a или $b. Если число $a больше $b, то старший бит равен 0, иначе равен 1. Затем мы используем битовую операцию & для вычисления результата умножения $k и $c. Если число $a меньше $b, то $k равно 1, и результат умножения $k * $c будет равен $c, иначе результат умножения будет равен 0. В конечном итоге, результатом функции get_max является $a - $k * $c, что и есть наибольшее.
14.02.2023 18:22
Цитата:
Mtirt Так устроит: sign(a-b) ?
Не устроит... -10 - 15 = -25 Знак (-1) ни о чём не говорит. Во вторых знак выражения как то нужно проверять, а операторы сравнения запрещены
14.02.2023 18:26
Цитата:
OlegON Невнятно описал задачу в теме и тексте
В чём её неоднозначность, невнятность, двоякое трактование???

... что по битовым операциям - я не "въехал"
14.02.2023 18:34
Цитата:
AndreyZh Цитата:
Mtirt ➤ Так устроит: sign(a-b) ?
Не устроит... -10 - 15 = -25 Знак (-1) ни о чём не говорит
Ну чтобы воспроизвести ваш пример, его достаточно.
Например: "Результат: a " + CHR(61+sign(a-b)) + " b"
выдаст верный символ больше/меньше/равно.
14.02.2023 18:51
Цитата:
vdm Ну чтобы воспроизвести ваш пример, его достаточно.
Например: "Результат: a " + CHR(61+sign(a-b)) + " b"
выдаст верный символ больше/меньше/равно.
Принято
14.02.2023 20:22
Цитата:
AndreyZh я не "въехал"
попробуй пошагово... магия будет понятна, результатом функции будет 10 (ну или другое бОльшее число, которое будет из двух поданных на вход)
14.02.2023 21:01
Но битовые операции не работают с нецелыми числами.
Часовой пояс GMT +3, время: 12:00.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.