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

Тернарный оператор - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.82
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
04.09.2011, 19:54     Тернарный оператор #1
Неактуально
Доброго времени суток.
Есть такой кусок кода, взятый из решения одной задачи:
C++
1
2
3
4
5
6
7
8
if ( c % 2 == 0 ? p < n : p > n ) 
{
   ++a;
}
else
{
   a = 0;
}
С ним решение проходит все тесты.
Я попытался его немного переделать:
C++
1
2
3
4
5
( c % 2 == 0 ? p < n : p > n ) 
?
   ++a
:
   a = 0;
Выдает неправильный ответ на первом же тесте. Хотя у меня нормально работает.
Есть 2 варианта:
1) Я чего-то не понимаю, мой код неоднозначен и будет выполнятся по разному на разных компиляторах.
2)Баг компилятора(VC++ 7.1 на проверяющей системе, проверял на 10й студии - все работает).

Помогите разобраться...

Задача.

Оба кода.
Получает Accepted.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <fstream>
int p, n, x, i, a, b, c;
 
int main()
{
    std::fstream v("input.txt"), o("output.txt", std::ios::out);
    
    for (v >> p >> p ; v >> n; ++c)
    {
        
        if ( c % 2 == 0 ? p < n : p > n ) 
        {
            ++a;
        }
        else
        {
            a = 0;
        }
        
        if ( c % 2 != 0 ? p < n : p > n ) 
        {
            ++b;
        }
        else
        {
            b = 0;
        }
        
        x = std::max( std::max(a, b), x );
        
        p = n;
    }
    
    o << x + 1;
 
}
Получает WA1.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <fstream>
int p, n, x, i, a, b, c;
 
int main()
{
    std::fstream v("input.txt"), o("output.txt", std::ios::out);
    
    for (v >> p >> p ; v >> n; ++c)
    {
        
        ( c % 2 == 0 ? p < n : p > n ) 
        ?
            ++a
            :
            a = 0;
        
        if ( c % 2 != 0 ? p < n : p > n ) 
        {
            ++b;
        }
        else
        {
            b = 0;
        }
        
        x = std::max( std::max(a, b), x );
        
        p = n;
    }
    
    o << x + 1;
 
}


Блин. Извиняюсь, это баг acmp =\ Пересдаю код, получивший Accepted, и получаю WA1. И так у всех. Спасибо всем, кто хотел откликнуться.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.09.2011, 19:54     Тернарный оператор
Посмотрите здесь:

C++ Засунуть в тернарный оператор
Тернарный оператор vs if/else C++
C++ Шахматы(заменить тернарный оператор) на if else
C++ Альтернатива if (.) {.} (тернарный оператор)
Тернарный оператор: возврат значения C++
Тернарный оператор и множество ошибок в коде C++
C++ Является ли тернарный оператор оператором сравнения?
C++ Как работает тернарный оператор

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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