Почему онлайн-судья выдает мне ошибку во время выполнения?

#c

Вопрос:

В проблеме UVA «100 Проблема 3n 1», когда я отправляю код, в нем говорится об ошибке во время выполнения. Код написан на языке C

https://onlinejudge.org/index.php?option=com_onlinejudgeamp;Itemid=8amp;page=show_problemamp;problem=36

Я перепробовал много вещей, но все еще не могу решить эту проблему

 #include <iostream>
#include <algorithm>

#define ll long long
#define N 10000

using namespace std;

int main(){
    int cont = 0, aux = 0;
    ll n1, n2, m; 

    ll dp[N] = {0};

    while (cin >> n1 >> n2) {
        cout << n1 << " " << n2 << " ";
        if(n1 > n2)
        {
            m = n2;
            n2 = n1;
            n1 = m;
        }
        for (ll i = n1; i <= n2; i  ) {
            ll num = i;
            if (num == 1) {
                cont = 1;
            }
            else{
                if (dp[num] != 0){
                    cont = dp[num];
                }
                else {
                    while (num >= 1){
                        if (num == 1) {
                            cont  = 1;
                            break;
                        }
                        if (num%2 != 0){
                            num = (3 * num)   1;
                        }
                        else{
                            num = num/2;
                        }
                        cont  = 1;
                    }
                    dp[num] = cont;
                }
            }
            aux = max(aux, cont);
            cont = 0;
        }
        cout << aux << "n";
        aux = 0;
    }
}
 

Комментарии:

1. Вы запустили свою программу через valgrind? Компилировать с включенными дезинфицирующими средствами? Что-нибудь, что поможет выяснить, откуда берется ошибка во время выполнения?

2. Runtime error нам недостаточно информации, чтобы помочь вам. Пожалуйста, уточните подробнее.

3. Рассмотрите возможность использования fuzzing для поиска случая сбоя, а затем запустите программу через отладчик с этим случаем сбоя.

4. Проблема, возможно, в dp[N] том, что она создает массив только из 0->9999

5. Я не могу воспроизвести вашу ошибку. Однако обратите внимание, что даже если они скажут: «Все целые числа будут меньше 10 000 и больше 0». Они могут лгать. Пожалуйста, также обратите внимание, что вы вообще не используете запоминание, так как строка dp[num] = cont; находится после цикла while (num >= 1){ if (num == 1) {... break;} ... } . Внутри этого цикла num может стать (намного) больше 10000, но снаружи…

Ответ №1:

Ограничение на ввод составляет 1 000 000 (а не 10 000). Предел указан неверно.

Аналогичная проблема: https://www.spoj.com/problems/PROBTNPO/