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

Олимпиадная задача. Не могу найти ошибку - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Возможные виды файлового ввода\вывода в С++ http://www.cyberforum.ru/cpp-beginners/thread638324.html
Здравсвуйте, уважаемые форумчане.Возникло пару вопросов касательно файлового ввода\вывода в С++. Итак, я не так давно начал постигать азы файлового i\o и я начал изучение с функций fopen(),fclose(),gets(c)(),puts(c)() и им подобных.Вроде эти методы понятны и просты. Но есть ли другие методы файлового ввода\вывода?Эти другие методы более удобные чем тот, который я изучаю, или нет? Расскажите...
C++ Изображение с веб-камеры Задача - получить фото/видео с вебкамеры под windows 7. Желательно готовый пример или хотя бы ссылки, где копать. (Понимаю, что не первый вопрос по этой теме, но ничего толкового не нашел) http://www.cyberforum.ru/cpp-beginners/thread638314.html
Исчезает колесо прокрутки у консоли C++
Когда я добавляю в код вот такую строку, system("mode con cols=80 lines=40"); то исчезает колесо прокрутки и я не могу вернуться к самой первой строчке консоли. Можно ли как нибудь вернуть все обратно?
C++ и сеть C++
Приветики-чмок. Хочу писать чатики и асечки, консольные шахматушки на троих и прочую радость. Раньше писал только оффлайн-приложения, с этими вашими интернетами дела не имел. Что читать/учить по этой теме, пускай даже в долговременной перспективе?
C++ Явное наследование конструкторов http://www.cyberforum.ru/cpp-beginners/thread638281.html
Если препод требует наследовать констуркторы явно что он имеет ввиду делать это только для дефолтных конструкторов или для не дефолтных тоже надо это делать и какая должна быть имплементация таких дерайфтных дефолтных конструкторов пустая ??? или не пустая например Derived::Derived() : Base() { CentralPoint = Point(0,0);
C++ Отсчет времени Собственно, нужно реализовать отсчет времени, сколько работает программа и вывести в лэйбл, как это реализовать? подробнее

Показать сообщение отдельно
Roukff
 Аватар для Roukff
1 / 1 / 0
Регистрация: 05.06.2011
Сообщений: 35

Олимпиадная задача. Не могу найти ошибку - C++

16.08.2012, 06:27. Просмотров 805. Ответов 11
Метки (Все метки)

Привет всем! Решил порешать олимпиадные задачи и столкнулся с проблемой: Написанный мной код правильно решает поставленную задачу, но сервер, на котором идет проверка, говорит, мол ответ неправильный на первом же тесте. Это вызвало большие подозрения. Все перепроверил, вроде все правильно. Начал подозревать, что возможно вывод неправильный. Но, вроде бы, тоже все верно. Не могу никак найти ошибку. Цитирую, как надо вводить информацию.

Исходные данные
The first line – a fraction (the first operand);
The second line – the sign of an operation;
The third line – a fraction (the second operand).
Both fractions may be reducible. The numerator is always less than the denominator.

Результат
A single line that contains an irreducible proper fraction (result) in the format described above.

Пример

исходные данные
-3 1/6
+
2/4
результат
-2 2/3

Примеры дробей
Samples of fractional number representation: “-7 3/4”, “8 1/2”, “-7/11”, “0”, “11”.

Код, отвечающий за ввод:

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
37
38
39
40
41
42
43
//структура дроби
struct Fractional
{
    //объявление целой части, числителя и знаменателя
    long long intPart, numerator, denomerator;
} _oneFract, _twoFract, _result;
 
//функция считывания дроби
Fractional ReadFractional()
{
    Fractional _fract;
    //переменная _razdel определяет, что ввели: только целую часть, только дробную часть или целую и дробную часть
    char _razdel;
    //считываем первое число
    scanf("%lld",&_fract.intPart);
    //считываем разделитель после первой цифры: если нажат Enter, то число без дробной части, 
    //если слеш, то только дробная часть, если пробел то и целая и дробная части присутствуют
    scanf("%c", &_razdel);
    if (_razdel == '\n')
    {
        _fract.numerator = 0;
        _fract.denomerator = 1;
    }
    else if (_razdel == ' ')
    {
        //Считываем дробную часть
        scanf("%lld/%lld%*c", &_fract.numerator, &_fract.denomerator);
        if (_fract.denomerator == 0)
            _fract.denomerator = 1;
    }
    else if (_razdel == '/')
    {
        //Считываем знаменатель
        scanf("%lld%*c", &_fract.denomerator);
        if (_fract.denomerator == 0)
            _fract.denomerator = 1;
        _fract.numerator = _fract.intPart;
        _fract.intPart = 0;
    }
    //Сбрасываем входной поток
    fflush(stdin);
    return _fract;
}
Вызов этой функции:
C++
1
2
3
4
5
6
7
8
9
//объявление переменной-знака
    char _sign;
 
    //Считываем первую дробь
    _oneFract = ReadFractional();
    //Считываем знак
    scanf("%c", &_sign);
    //Считываем вторую дробь
    _twoFract = ReadFractional();
Код, отвечающий за вывод результата

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
if (_result.intPart == 0)
    {
        if (_result.numerator == 0)
        {
            printf("0");
        }
        else
        {
            printf("%lld/%lld", _result.numerator, _result.denomerator);
        }
    }
    else if (_result.numerator == 0)
    {
        printf("%lld",_result.intPart);
    }
    else
    {
        printf("%lld %lld/%lld",_result.intPart, _result.numerator, _result.denomerator);
    }
Также нашел на форуме еще одного человека с похожей проблемой, только он ввод делал через getline(). Вот что он пишет, мб это пригодится для выяснения причины
Strange...I had taken input through getline and removed last character if it was null or end of line. And I was getting wrong answer. But when I changed it to the condition, that remove last character if it is not from 0 to 9, it got AC.
Can anybody explain why?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 17:45. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru