Модераторы: Alx, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Какое число больше?(Линейно) 
V
    Опции темы
FantomaS19
Дата 12.9.2007, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 81
Регистрация: 28.7.2007

Репутация: нет
Всего: нет



Вот задача.Даны два числа.Определить какое из них больше линейным способом smile 
То есть нельзя написать: если x > y, то x больше, иначе y больше. Циклом тоже нельзя.
Только линейно, т е когда действия следуют друг за другом.
PM MAIL   Вверх
maxim1000
Дата 12.9.2007, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 2
Всего: 110



ну тут уж от языка зависит:
Код

std::cout<<(x>y)?"больше":"меньше";

или от представления чисел в памяти:
Код

char *texts[2]={"больше","меньше"};
int index=(x-y)>>31;
std::cout<<texts[index];

(тут предполагается, что x и y 32-разрядные знаковые числа)


--------------------
qqq
PM WWW   Вверх
Akina
Дата 12.9.2007, 16:32 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 2
Всего: 454



Код
NumOfGreater = ( Sign( Num2 - Num1 ) + 3 ) / 2



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
nworm
Дата 12.9.2007, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 502
Регистрация: 22.10.2005

Репутация: нет
Всего: 8



Можно вычесть одно число из другого. В результате вычитания один бит отвечает за знак.

Обнуляем все остальные биты (наложи маску), и выдаём результат в качестве ответа.
(ответ 0 - одно число больше, не нулевой ответ - другое).

Если хочется, можно единственный не равный нулю бит передвинуть на первое место.
тогда ответ 0 - одно число больше, 1 - другое.

Не заметил сообщение maxim1000, можно этот пост удалять.


Это сообщение отредактировал(а) nworm - 12.9.2007, 16:43
PM MAIL WWW   Вверх
FantomaS19
Дата 12.9.2007, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 81
Регистрация: 28.7.2007

Репутация: нет
Всего: нет



Понятно что в языке можно это как-то обойти, но нужно ответить без привязки к конкретному языку.Просто блок-схему нарисовать
PM MAIL   Вверх
diamondd
Дата 12.9.2007, 20:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 11.9.2007

Репутация: нет
Всего: нет



А если числа равны? smile 
Код

Greater = ( Abs( x2 - x1 )/( x2 - x1 ) ) + 2;

А ошибкау по поводу деления на ноль обойти
PM MAIL   Вверх
Akina
Дата 13.9.2007, 09:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 2
Всего: 454



Так нужно получить, грубо говоря, номер переменной с бОльшим значением, или само значение?




--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
FantomaS19
Дата 13.9.2007, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 81
Регистрация: 28.7.2007

Репутация: нет
Всего: нет



Без подсветки:
 
Код

Greater = ( Abs( x2 - x1 )/( x2 - x1 ) ) + 2;

Чето вообще не понял.Берем любые два числа, подставляем:например: 4 и 6; 6 и 4
В одном случае Greater = 1, во втором = 3.Это ни номера ни сами значения. smile 

Цитата

Так нужно получить, грубо говоря, номер переменной с бОльшим значением, или само значение?
 
В тот момент я не задумался над этим, но вроде надо сами значения.



PM MAIL   Вверх
Akina
Дата 13.9.2007, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 2
Всего: 454



Цитата(FantomaS19 @  13.9.2007,  11:36 Найти цитируемый пост)
вроде надо сами значения.

Код

Max = ((Sign(Val1-Val2) + 1) * Val1 + (Sign(Val2-Val1) + 1) * Val2) / 2



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
FantomaS19
Дата 13.9.2007, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 81
Регистрация: 28.7.2007

Репутация: нет
Всего: нет



Код

Max = ((Sign(Val1-Val2) + 1) * Val1 + (Sign(Val2-Val1) + 1) * Val2) / 2

Вот это то что надо!Спасибо!
PM MAIL   Вверх
Bacchus
Дата 14.9.2007, 05:24 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 14.9.2007

Репутация: нет
Всего: нет



Код

Max(a, b) = (a + b + abs(a - b)) /2


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Интересные и занимательные задачи по программированию | Следующая тема »


 




[ Время генерации скрипта: 0.1056 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.