【发布时间】:2021-02-23 13:19:03
【问题描述】:
这是我的函数,真的很乱,只是想弄清楚如何得到答案,然后优化它。
但基本上你必须减去矩阵中两条对角线中每个字符的总和。
r 是矩阵的大小(f.e 3 = 3 行 3 列)
然后输入每个字符。 所以输入应该看起来像
3
11 2 4
4 5 6
10 8 -12
所以最后,我得到 leftD = 4 和 rightD = 19。
abs(4-19) 应该是 15,但由于某种原因,我一直得到 1,即使我尝试了上百万个不同的版本。
(这是hackerrank的问题)
using namespace std;
int diagonalDifference(vector<vector<int> > arr)
{
int r;
int c;
int leftD = 0;
int rightD = 0;
int diff;
cin >> r;
int x = 0;
for (int i = 0; i < r; i++) {
arr.push_back(vector<int>());
for (int j = 0; j < r; j++) {
cin >> x;
arr[i].push_back(x);
}
}
for (int i = 0; i < r; i++) {
leftD += arr[i][i];
}
for (int i = 1; i < r - 1; i++) {
rightD += arr[0][r - 1] + arr[i][i] + arr[r - 1][0];
}
diff = abs(leftD - rightD);
return diff;
}
int main()
{
vector<vector<int> > arr;
diagonalDifference(arr);
cout << diagonalDifference;
}
【问题讨论】:
-
cout << diagonalDifference;确定要打印函数地址吗? -
rightD += arr[0][r - 1] + arr[i][i] + arr[r-1][0];似乎是错误的。应该是rightD += arr[i][r - 1 - i];。 -
别忘了打开编译器警告。
标签: c++