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

标签 c++ arrays

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

输入示例:

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;
  }
}

代码运行得很好,除非第二行有负数

最佳答案

您的怀疑是正确的 max = 0; 。为什么这是一个问题?好吧,首先,也许您应该尝试 explain to your rubber duck为什么它是正确的。当您尝试这样做时,您可能会表达这样的意图:“此值将无法通过检查”“此值将在第一次迭代中被替换循环”。为什么? “因为 matrix[1][j] > max 为 true,所以...等等,当 matrix[1][j] > 0 为 false 时,不是有问题吗?那么当 max0 时,嗯...有问题吗?”

总体策略有效,但有一个要求:max被初始化为足够低的值。目前我能想到的常见策略有两种。

  1. 使用值 as low as possible对于您正在使用的类型。即:
    int max = std::numeric_limits<int>::lowest();

  2. 使用循环第一次迭代中的值。无需提供无论如何都会被替换的值。不过,对此有一些注意事项。与您的示例最相关的问题可以表达为一个问题:如果没有第一次迭代怎么办? (也许只有一行?也许没有列?)另外,您需要初始化 max在给定矩阵值之后,在循环之间
    int max = (n > 1 && m > 0) ? matrix[1][0] : /* what value do you want here? */;

关于C++ 数组中最大的数字。正面及负面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58328573/

相关文章:

C++ 服务器连接问题

c++ - SonarQube 社区版的 SonarCFamily 插件

c++ - C++ 筛选代码中的不可见内存错误

arrays - 变量中带有逗号的 ColdFusion 表单数组

arrays - 使用带有附加参数的自定义规则验证 Laravel 中的数组

python - 如何获得产生特定总和的top-x元素

java - 创建一个最多包含 100 个值的 java 列表

c++ - Moc'ed 文件神秘地从 Visual Studio 项目中排除

c++ - Visual C++ 和窗口服务

java - 解析 JSONObject 和 JSONArray 并在 ListView 中修复它们