Форум программистов, компьютерный форум CyberForum.ru

Задача №2958. Максимум - C++

Восстановить пароль Регистрация
 
Паскалька
 Аватар для Паскалька
10 / 10 / 1
Регистрация: 10.09.2013
Сообщений: 136
Записей в блоге: 1
29.12.2013, 14:41     Задача №2958. Максимум #1
Напишите программу, которая считывает два целых числа a и b и выводит наибольшее значение из них. Числа — целые от 1 до 1000.

При решении задачи можно пользоваться только целочисленными арифметическими операциями +, -, *, //, %, =. Нельзя пользоваться нелинейными конструкциями: ветвлениями, циклами, функциями вычисления модуля, извлечения квадратного корня.

Использование функции max запрещено!

Надеюсь получить хоть какие-то объяснения)
Могу решить несколькими способами, но они все запрещены(((
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.12.2013, 14:41     Задача №2958. Максимум
Посмотрите здесь:

C++ максимум в массиве
найти максимум из x[1]...x[n] C++
максимум C++
найти максимум C++
C++ Задача на максимум.Вектора
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Кирилл
1 / 1 / 0
Регистрация: 28.03.2012
Сообщений: 25
29.12.2013, 14:49     Задача №2958. Максимум #2
А использовать тренарный оператор ?: нельзя?
Паскалька
 Аватар для Паскалька
10 / 10 / 1
Регистрация: 10.09.2013
Сообщений: 136
Записей в блоге: 1
29.12.2013, 14:51  [ТС]     Задача №2958. Максимум #3
Цитата Сообщение от Кирилл Посмотреть сообщение
А использовать тренарный оператор ?: нельзя?
Все что нельзя написано. А это наверно можно.
Кирилл
1 / 1 / 0
Регистрация: 28.03.2012
Сообщений: 25
29.12.2013, 14:54     Задача №2958. Максимум #4
Ну тогда все просто
C++
1
c = a > b ? a : b;
Паскалька
 Аватар для Паскалька
10 / 10 / 1
Регистрация: 10.09.2013
Сообщений: 136
Записей в блоге: 1
29.12.2013, 14:55  [ТС]     Задача №2958. Максимум #5
Цитата Сообщение от Кирилл Посмотреть сообщение
Ну тогда все просто
C++
1
c = a > b ? a : b;
Прости, я скажем так "Дурачек", чуть-чуть объясни
Кирилл
1 / 1 / 0
Регистрация: 28.03.2012
Сообщений: 25
29.12.2013, 14:58     Задача №2958. Максимум #6
http://cppstudio.com/uchebniki/yazyk...ya-vybora-v-s/
Паскалька
 Аватар для Паскалька
10 / 10 / 1
Регистрация: 10.09.2013
Сообщений: 136
Записей в блоге: 1
29.12.2013, 14:58  [ТС]     Задача №2958. Максимум #7
Цитата Сообщение от Кирилл Посмотреть сообщение
Ну тогда все просто
C++
1
c = a > b ? a : b;
Вроде понял, да и пишется Тернарный оператор или не?
Nick Alte
Эксперт С++
1590 / 982 / 115
Регистрация: 27.09.2009
Сообщений: 1,897
Завершенные тесты: 1
29.12.2013, 15:14     Задача №2958. Максимум #8
Есть числа a > 0, b > 0.
Разность: d = a - b, знак неизвестен.
Операция остатка x%y работает математически неправильно, возвращает отрицательное число при отрицательных x и терпимо относится к отрицательным y.
(d+1)%d даст нам 1 при положительном d и (d+1) при отрицательном. Вычтем из результата 1, это будет 0 или d соответственно. Зафиксируем: f(x) = ((x+1) % x) -1
Если a < b, то d будет отрицательным, f(a - b) = a - b. Вычтем его из a, получим a - (a - b) = b, наибольшее из двух чисел. Если a > b, то f(a - b) = 0, вычтя 0 из a, получим a, опять же наибольшее из чисел.
В случае равенства a = b при вычислении f будет деление на 0, это недостаток, над искоренением которого можно поработать дальше. Если нужно.
C++
1
2
3
4
5
6
7
8
9
inline int f(int x)
{
    return ((x + 1) % x) - 1;
}
 
inline int myMax(int a, int b)
{
    return a - f(a - b);
}
Добавлено через 3 минуты
Кстати, тернарный оператор запрещён условиями задачи, ведь он является ветвлением.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.12.2013, 17:06     Задача №2958. Максимум
Еще ссылки по теме:

Локальний максимум C++
Среди введенных четных чисел найдите максимум (М1), также найдите максимум (М2) среди нечетных чисел C++
C++ Задача на максимум и минимум

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
ya_noob
_
200 / 144 / 9
Регистрация: 08.10.2011
Сообщений: 432
29.12.2013, 17:06     Задача №2958. Максимум #9
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <cstdio>
using namespace std;
 
int main()
{
    int a, b;
 
    scanf( "%d%d", &a, &b );
    printf( "max: %d\n", ( a / b * a + b / a * b ) / ( a / b + b / a ) );
 
    return 0;
}
Yandex
Объявления
29.12.2013, 17:06     Задача №2958. Максимум
Ответ Создать тему
Опции темы

Текущее время: 10:48. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru