HackerRank的对角线差异

时间:2018-08-01 17:17:47

标签: c algorithm

我正在尝试解决this。我的算法在离线编译器中给出正确答案。我不知道错误在哪里。我是C语言的新手。

该问题要求创建一个函数以查找方矩阵的左右对角线的绝对差。

这是我对网站的解决方案。当我在线运行代码时,输​​出为12。

int diagonalDifference(int arr_rows, int arr_columns, int** arr) {

    int primary_sum, secondary_sum = 0;
    for(int row,column = 0; row < arr_rows && column < arr_columns; row++, column++){

        primary_sum += arr[row][column];
        secondary_sum += arr[row][arr_columns - column - 1];

    }

    return abs(primary_sum - secondary_sum);

}

我写了一个类似的程序来测试离线。

#include <stdio.h>
#include <stdlib.h>

void matrix_sum(int arr_rows, int arr_columns, int arr[3][3]);
int main(void){

    int arr[3][3] = {
                    {11, 2, 4},
                    {4, 5, 6},
                    {10, 8, -12}
                  };

    matrix_sum(3, 3, arr);


}


void matrix_sum(int arr_rows, int arr_columns, int arr[3][3]){

    int row,column = 0;
    int primary_sum, secondary_sum = 0;
    int digonals[3];
    int s_digonals[3];

    for(; row < arr_rows && column < arr_columns; row++, column++){
        primary_sum += arr[row][column];
        secondary_sum += arr[row][arr_columns - column - 1];

        digonals[row] = arr[row][column];
        s_digonals[row] = arr[row][arr_columns - column - 1];

    }

    printf("primary_sum = %i\n", primary_sum);
    printf("secondary_sum = %i\n", secondary_sum);

    for(int i = 0; i < row; i++){
        printf("%i ",digonals[i]);
    }
    printf("\n");

    for(int i = 0; i < row; i++){
        printf("%i ",s_digonals[i]);
    }
    printf("\n%i\n", abs(primary_sum - secondary_sum) );



}

第二个程序给出的正确结果是15,我不知道为什么在线编译器给出输出12。

输入为。

3

11 2 4

4 5 6

10 8 -12

1 个答案:

答案 0 :(得分:2)

您的逻辑似乎正确。但是看看这一行:

 int primary_sum, secondary_sum = 0;

primary_sum初始化为-0还是垃圾值是什么? HackerRank提供了一个名为“您的输出”的框,该框将您的总和显示为18179734。我让你从这里调试。