我有一个任务来打印矩阵第二行的最大整数。
示例输入:
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
为真,所以...等等,matrix[1][j] > 0
为假时不是问题吗?所以当max
为0
时,嗯...问题了?“] >
整体策略是有效的,但要求将max
初始化为足够低的值。目前,我可以想到两种常见的策略。
对于所使用的类型,请使用as low as possible作为值。那是:int max = std::numeric_limits<int>::lowest();
使用循环的第一次迭代中的值。无需提供无论如何都会被替换的值。但是,对此有一些警告。与您的示例最相关的可以表达为一个问题:如果没有第一次迭代该怎么办? (也许只有一行?也许没有列?)另外,您将需要在循环之间初始化max
int max = (n > 1 && m > 0) ? matrix[1][0] : /* what value do you want here? */;