gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 10:22:18 25 4
gpt4 key购买 nike

我仍然是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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com