Задать вопрос
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 просмотров
Подписаться 1 Простой 2 комментария
Ответ пользователя Антон Барышев К ответам на вопрос (3)
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;
}
Ответ написан
Комментировать