【问题标题】:Why do i get a return value of 1 when subtracting 19 from 4 [duplicate]为什么从 4 中减去 19 时返回值为 1 [重复]
【发布时间】: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 &lt;&lt; diagonalDifference;确定要打印函数地址吗?
  • rightD += arr[0][r - 1] + arr[i][i] + arr[r-1][0]; 似乎是错误的。应该是rightD += arr[i][r - 1 - i];
  • 别忘了打开编译器警告。

标签: c++


【解决方案1】:

您需要保存函数返回的值。目前你只是丢弃它。

试试:

int result = diagonalDifference(arr);
cout << result;

【讨论】:

  • 最后,非常感谢!
【解决方案2】:

你在这里做什么

diagonalDifference(arr);
cout << diagonalDifference;

  1. 调用函数diagonalDifference并丢弃结果
  2. 如果函数diagonalDifference的地址为真则打印(这将永远为真)

您应该打印函数调用的结果(从函数返回的内容)。

cout << diagonalDifference(arr);

【讨论】:

    猜你喜欢
    • 2012-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多