C ++数组中最大的数字。正负

问题描述 投票:3回答:1

我有一个任务来打印矩阵第二行的最大整数。

示例输入:

3 2 (n, m)

-1 -2 <- 1 line

4 5 <- 2 line

2 6 <- 3 line

第二行的最大int为5。我的程序将其打印出来。但是,如果第二行是-100 -150,则行不通。当然是因为我的max = 0,但是我不知道如何正确使用它。我是学生。预先感谢。

这是我的代码:

#include <iostream>

using namespace std;

int main() {
  int n, m, max = 0;
  cin >> n >> m;

  int matrix[10][10];

  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      cin >> matrix[i][j];
    }
  }

  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      if (matrix[1][j] > max) {
        max = matrix[1][j];
      }
    }
  }

  if (max == 0 || n == 1) {
    cout << "No";
  } else {
    cout << max;
  }
}

并且代码工作得很好,除非第二行中有负数

c++ arrays
1个回答
1
投票

您怀疑max = 0;是正确的。为什么会有问题呢?好吧,首先,也许您应该尝试explain to your rubber duck为什么它是正确的。在尝试执行此操作时,很可能沿“此值不会通过检查通过”“此值将在循环的第一次迭代中替换”的方式表达意图。 。为什么? “因为matrix[1][j] > max为真,所以...等等,matrix[1][j] > 0为假时不是问题吗?所以当max0时,嗯...问题了?“] >

整体策略是有效的,但要求将max初始化为足够低的值。目前,我可以想到两种常见的策略。

  1. 对于所使用的类型,请使用as low as possible作为值。那是:int max = std::numeric_limits<int>::lowest();

  2. 使用循环的第一次迭代中的值。无需提供无论如何都会被替换的值。但是,对此有一些警告。与您的示例最相关的可以表达为一个问题:如果没有第一次迭代该怎么办? (也许只有一行?也许没有列?)另外,您将需要在循环之间初始化max

  3. ,在给定矩阵值之后。int max = (n > 1 && m > 0) ? matrix[1][0] : /* what value do you want here? */;
© www.soinside.com 2019 - 2024. All rights reserved.