c++ - C++对角线差异问题,我要去哪里错了?

标签 c++

我仍然是C++的初学者,并尝试解决“对角线差异”问题。

给定一个方阵,我应该计算其对角线之和之间的绝对差。

例如:

11 2 4
4 5 6
10 8 -12

主对角线:
11
   5
     -12

次对角线:
     4
   5
10

解决方案为15。(绝对值)

我的代码在某些测试用例中有效,但并非全部。我陷入困境,想知道我哪里出了错。这是我到目前为止的内容:
int diagonalDifference(vector<vector<int>> arr) 
{
    int firstTotal = 0;
    int secondTotal = 0;
    int absTotal = 0; 
    int firstMiddleNumbers = 0;
    int secondMiddleNumbers = 0;
    int lastY = arr.size()-1;
    int lastX = arr[0].size()-1;

    for(int i = 1; i < arr.size(); i++)
    {
        firstMiddleNumbers += arr[i][i];
    }

    firstTotal = arr[0][0] + firstMiddleNumbers + arr[lastX][lastY];

    for(int j = arr[0].size()-1; j > 0; j--)
    {
        secondMiddleNumbers += arr[j][j]; 
    }

    secondTotal = arr[lastX][0] + secondMiddleNumbers + arr[0][lastY];

    absTotal = abs(firstTotal-secondTotal);

    return absTotal;

}

编辑:

更新了解决方案,仍在将其放入一个for循环中。
int diagonalDifference(vector<vector<int>> arr) 
{
    int firstMiddleNumbers = 0;
    int secondMiddleNumbers = 0;
    int k = 0;

    for(int i = 0; i <= arr.size()-1; i++)
    {
        firstMiddleNumbers += arr[i][i];
    }
    for(int j = arr[0].size()-1; j >= 0; j--)
    {
        secondMiddleNumbers += arr[j][k]; 
        k++;
    }
    return abs(firstMiddleNumbers-secondMiddleNumbers);
}

最佳答案

您只需要一个运行的“difference total”变量,并且只需要一个for循环。

提示:每列访问一次。您只需要一个for循环,因为它是一个方矩阵。幼稚的双嵌套for循环(索引ij)方法可以隐式折叠为一个循环,其中column = irowA = irowB= (n - 1) - i(从零开始)。这是因为您可以对表达式的加法和减法项进行重新排序,因为整数加法是可交换的。

简单来说,根据您的示例:
(11 + 5 - 12) - (10 + 5 + 4)(11 - 10) + (5 - 5) + (-12 - 4)相同,您可以利用这一事实来简化您的代码以访问每一列一次,将差值累加到一个变量中,而不必尝试同时评估对角线和存储中间结果。

关于c++ - C++对角线差异问题,我要去哪里错了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59557747/

相关文章:

c++ - Windows - Visual Studio 2013 : OpenMP: omp_set_num_threads() not working

c++ - 为什么这会造成无限循环

c++ - 编译c++程序时的 fatal error

c++ - 从 C 调用系统 C++ 函数

c++ - 使用 gcc 编译的应用程序与使用不同 gcc 版本编译的库不同

c++ - 从字符串中删除字符直到它变空

c++ - 识别两个函数

c++ - 在 vector 中存储重复字符串时节省内存?

c++ - cpp中rand()方法的bankend程序是什么

以 lambdas 作为参数的 C++ 函数