crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> Упростите функцию...
ViGOur
  опции профиля:
сообщение 23.8.2010, 21:26
Сообщение #1


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Упростите функцию:
int func( int a, int b, int c, int d)
{
    if( a > b)
    {
        if( a > c)
        {
            if( a > d)
                return a;
            else
                return d;
        }
        else
        {
            if( c > d)
                return c;
            else
                return d;
        }
    }
    else
    {
        if( b > c)
        {
            if( b > d)
                return b;
            else
                return d;
        }
        else
        {
            if( c > d)
                return c;
            else
                return d;
        }
    }

    return -1;
}
Забавный пример... :)
Если вам интересна задача, то сначала решите её, а потом уже читайте то, что ниже ответили другие...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 23.8.2010, 21:49
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


int func( int a, int b, int c, int d)
{
    return std::max( a, std::max(b, std::max( c, d ) ) );
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 23.8.2010, 21:57
Сообщение #3


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


а без std? :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 23.8.2010, 22:00
Сообщение #4


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


Цитата(ViGOur @ 23.8.2010, 22:57) *
а без std? :)

А чем можно пользоваться? :)
#define?

Сообщение отредактировал BRE - 23.8.2010, 22:00
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 23.8.2010, 22:18
Сообщение #5


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Чистым С\С++ без stl и прочих вкусностей, в остальном ограничений нет.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 23.8.2010, 22:31
Сообщение #6


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


int func( int a, int b, int c, int d)
{
#define MAX(x,y) (x) > (y) ? (x) : (y)

    return MAX( a, MAX( b, MAX( c, d ) ) );
}


Сообщение отредактировал BRE - 23.8.2010, 22:47
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 23.8.2010, 22:46
Сообщение #7


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


В принципе оптимальный вариант, а еще какие есть варианты?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 24.8.2010, 8:21
Сообщение #8


фрилансер
******

Группа: Участник
Сообщений: 2939
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


вот, если не ошибся в рассуждениях )
/*
int func( int a, int b, int c, int d)
{
    if( a > b)
    {
        if( a > c)
        {
            if( a > d)
                return a;//a, если a > b && a > c && a > d
            else
                return d;//d, если a > b && a > c && a <=d
        }
        else
        {
            if( c > d)
                return c;//с, если a > b && a<=c && c > d
            else
                return d;//d, если a > b && a<=c && c <=d
        }
    }
    else
    {
        if( b > c)
        {
            if( b > d)
                return b;//b, если b > c && b > d
            else
                return d;//d, если b > c && b <=d
        }
        else
        {
            if( c > d)
                return c;//c, если b <=c && c > d
            else
                return d;//d, если b <=c && c <=d
        }
    }

    //сюда не попадём никогда
    throw;
    return -1;
}
*/

int func( int a, int b, int c, int d)
{

    //a, если a > b && a > c && a > d
    if(a>b && a>c && a>d)
    {
        return a;
    }

    //b, если b > c && b > d
    if(b>c && b>d)
    {
        return b;
    }

    //с, если a > b && a<=c && c > d
    //c, если b <=c && c > d
    if( c>d && (a>b && a<=c || b<=c))
    {
        return c
    }

    //d, если a > b && a > c && a <=d
    //d, если b > c && b <=d
    //d, если b <=c && c <=d
    return d;
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuzulis
  опции профиля:
сообщение 24.8.2010, 9:29
Сообщение #9


Активный участник
***

Группа: Участник
Сообщений: 393
Регистрация: 29.6.2009
Пользователь №: 862

Спасибо сказали: 36 раз(а)




Репутация:   7  


int func( int a, int b, int c, int d)
{
    int size = 3
    int arr[3] = {b, c, d}
  
    while (size--) {
        if ( arr[size] > a)
            a = arr[size];
    }
    return a;
}


PS: как то так :)

PSPS: предыдущие постеры (как и я) не учли return -1 если все элементы равны :)

ИЛИ

int func( int a, int b, int c, int d)
{
    if (b > a) a = b;
    if (c > a) a = c;
    if (d > a) a = d;
    return a;
}


Сообщение отредактировал kuzulis - 24.8.2010, 9:40
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 24.8.2010, 9:52
Сообщение #10


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


теперь у kuzulis самый оптимальный, и читабельный вариант. Тот который без цикла.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Ответить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.3.2024, 20:29