Как исправить ошибку сегментации в коде? - PullRequest
0 голосов
/ 18 марта 2020

Пример ввода

3
11 2 4
4 5 6
10 8 -12
Пример вывода

15
Объяснение

Первичная диагональ:

11
5
-12
Сумма по основной диагонали: 11 + 5 - 12 = 4

Вторичная диагональ: :

4
5
10
Сумма по вторичной диагонали: 4 + 5 + 10 = 19
Разница: | 4 - 19 | = 15

#include <iostream>

using namespace std;

int main()
{
    int n;
    cin >> n;
    int i, j;
    int arr[i][j];
    int x1 = 0, x2 = 0;
    for (i = 1; i <= n; ++i)
    {
        for (j = 1; j <= n; ++j)
        {
            cin >> arr[i][j];
        }
    }
    for (i = 1; i <= n; i++)
    {
        for (j = 1; j <= n; j++)
        {
            if (i == j)
                x1 = x1 + arr[i][j];
        }
    }
    for (i = 1; i <= n; i++)
    {
        for (j = n; j <= 1; j--)
        {
            x2 = x2 + arr[i][j];
        }
    }
    cout << abs(x1 - x2);
}

1 Ответ

2 голосов
/ 18 марта 2020

Вот ваш исправленный код:

1) Во-первых, вы объявили двумерный массив размера мусора.

2) Во-вторых, индексация массива начинается с 0 в большинстве программ. языки, кроме MATLAB.

3) Всегда используйте прединкремент до тех пор, пока постинкремент не является абсолютно необходимым.

#include <iostream>
using namespace std;

int main()
{
    int n;
    cin >> n;
    int i, j;
    int arr[n][n];
    int x1 = 0, x2 = 0;
    for (i = 0; i < n; ++i)
    {
        for (j = 0; j < n; ++j)
        {
            cin >> arr[i][j];
        }
    }
    for (i = 0; i < n; ++i)
    {
        for (j = 0; j < n; ++j)
        {
            if (i == j)
                x1 += arr[i][j];
        }
    }
    for (i = 0; i < n; ++i)
    {
        for (j = 0; j < n; ++j)
        {
            if(i + j == n - 1)
                x2 += arr[i][j];
        }
    }
    cout << abs(x1 - x2);
    return 0;
}

PS: У вас много возможностей для улучшения форматирование кода.

...