Возвращает 0 в моей функции вычисления matrix hourglass

#c

#c

Вопрос:

У меня возникли проблемы с этим набором кодов, и я понятия не имею, почему, поэтому цель этого кода — получить значение фигуры песочных часов в матрице. Например.

 1 1 1 0 0 0
0 1 0 0 0 0
1 1 1 0 0 0
0 0 2 4 4 0
0 0 0 2 0 0
0 0 1 2 4 0
  

И это предназначено для получения максимального количества из всех возможных песочных часов, поэтому для тех, кто не понимает код, это предназначено для примера,

 1 1 1
  1 
1 1 1
  

Это форма песочных часов, предполагается, что она находит максимальное из всех значений и выводит его, в этом случае максимальное значение будет равно 19. Но по какой-то причине, когда значения в матрице отрицательные, мой cout всегда возвращает 0 вместо отрицательного числа, и я не понимаю почему. Было бы здорово, если бы кто-нибудь мог меня просветить. Спасибо.

 0 -4 -6 0 -7 -6
-1 -2 -6 -8 -3 -1
-8 -4 -2 -8 -8 -6
-3 -1 -2 -5 -7 -4
-3 -5 -3 -6 -6 -6
-3 -6 0 -8 -6 -7
  

Пример отрицательного ввода.

 int main()
{
    vector<vector<int>> arr(6);
    for (int i = 0; i < 6; i  ) {
        arr[i].resize(6);

        for (int j = 0; j < 6; j  ) {
            cin >> arr[i][j];
        }

        cin.ignore(numeric_limits<streamsize>::max(), 'n');
    }

    int maximumoutput = 0;
    int temp = 0;

    for(int r = 0; r < 4; r  ){
        for(int i = 0; i < 4; i   ){
            for(int c = i; c < i 3; c  ){
                temp  = arr[r][c];
                temp  = arr[r 2][c];
            }
            temp  = arr[r 1][i 1];
            maximumoutput = temp > maximumoutput ? temp : maximumoutput;
            temp = 0;
        }
    }

    cout << maximumoutput;

    return 0;
}
  

Ответ №1:

Это потому, что вы инициализировали значение maximumoutput с 0. Таким образом, вы никогда не получите значения ниже 0 из-за этой проверки:

 maximumoutput = temp > maximumoutput ? temp : maximumoutput;
  

Чтобы исправить, вам нужно инициализировать maximumoutput с минимально возможным значением

 maximumoutput = std::numeric_limits<int>::min();
  

Ответ №2:

это потому, что вы инициализировали max на 0 .. и результат кода должен быть -19, а это меньше 0, который был первым значением для max

вам нужно добавить условие, которое проверяет, находитесь ли вы в первой из матрицы, подобной этой

     int main()
{
    vector<vector<int>> arr(6);
    for (int i = 0; i < 6; i  ) {
        arr[i].resize(6);

        for (int j = 0; j < 6; j  ) {
            cin >> arr[i][j];
        }

        cin.ignore(numeric_limits<streamsize>::max(), 'n');
    }

    int maximumoutput = 0;
    int temp = 0;

    for(int r = 0; r < 4; r  ){
        for(int i = 0; i < 4; i   ){
            for(int c = i; c < i 3; c  ){
                temp  = arr[r][c];
                temp  = arr[r 2][c];
            }
            temp  = arr[r 1][i 1];
             // here edition 
            if(r == 0 amp;amp; i==0){
                maximumoutput = temp;
            }
            maximumoutput = temp > maximumoutput ? temp : maximumoutput;
            temp = 0;
        }
    }

    cout << maximumoutput;

    return 0;
}