AVollane
@AVollane
Начинающий C# разработчик

Как олимпиадная задача должна принимать и возвращать данные?

Здравствуйте. Меня направили на курс, где изучают алгоритмы и олимпиадное программирование на C++ (сам изучаю C#, но пришлось хотя бы немного поизучать C++). До этого я не занимался олимпиадным программированием и не работал с системами автоматической проверки заданий.
После просмотра обучающего видео на нужно было написать программу для поиска n-ого числа Фибоначчи. Я реализовал рекурсивную функцию на C++:
int n_fibonacci_num(int n) {
    if (n < 2) return n;
    return n_fibonacci_num(n - 1) + n_fibonacci_num(n - 2);
}


Теперь я использую вот такой код метода main():
int main() {
    int n;
    cin >> n;

    int result = n_fibonacci_num(n);

    cout << result;
    return 0;
}


У меня на компьютере всё работает корректно, но при загрузке кода в систему проверки мне вылетает следующее сообщение:
60b1ff4d4e439112915970.png

У меня есть подозрение, что это происходит из-за потока ввода с консоли.
В своей программе я использую cin >> n; для принятия параметра
И cout << result; для отправки ответа.
Мне кажется, что автоматическая система не умеет работать с консольным потоком. Объясните, как работать с такими автоматическими системами при решении олимпиадных задач. Заранее спасибо.
  • Вопрос задан
  • 105 просмотров
Решения вопроса 2
Lynn
@Lynn
nginx, js, css
Обычно в условиях или правилах написано откуда берётся вход и как отдавать результат.
Чаще всего это stdin/stdout или (реже) какие-нибудь файлы со стандартными именами типа INPUT.TXT/OUTPUT.TXT.

Но в вашем случае ваша программа реально долго выполняется потому что у вас реализован самый неоптимальный алгоритм вычисления чисел Фибоначчи который только можно придумать.
Ответ написан
@kalapanga
Обычно вот там, куда Вы свою задачу на проверку отправляете, описаны требования к проверяемой программе - как в неё должны вводиться данные и как она должна вывести результат. Вам нужно эти требования найти. Логично спросить об этом преподавателей Вашего курса.
В зависимости от задачи данные могут вводиться в командной строке, из файла, но уж точно не руками.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
AVollane
@AVollane Автор вопроса
Начинающий C# разработчик
Вы были совершенно правы! Моя программа действительно просто была слишком долгой из-за рекурсивного алгоритма. Я использовал другой алгоритм и всё заработало. Если кому интересно, то вот код функции:
int n_fibonacci_num(int n) {
    if (n <= 2) return 1;
    int x = 1;
    int y = 1;
    int ans = 0;
    for (int i = 2; i < n; i++)
    {
        ans = x + y;
        x = y;
        y = ans;
    }
    return ans;
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы