我正在尝试解决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
答案 0 :(得分:2)
您的逻辑似乎正确。但是看看这一行:
int primary_sum, secondary_sum = 0;
primary_sum
初始化为-0
还是垃圾值是什么? HackerRank提供了一个名为“您的输出”的框,该框将您的总和显示为18179734
。我让你从这里调试。