gpt4 book ai didi

c - 在处理并列情况的同时在矩阵中找到最大值 [在 C 中]

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:51:14 25 4
gpt4 key购买 nike

我正在尝试找出矩阵中的最大值。我在 C 中是这样做的:

int max = matrix[0][0], max_i = 0, max_j = 0;
for(int i = 0; i < 10; i++) {
for(int j = 0; j < 10; j++) {
if(matrix[i][j] > max) {
max = matrix[i][j];
max_i = i;
max_j = j;
}
}
}

但是如果我想知道是否有平局怎么办?在这种情况下,我希望我的函数返回 -1。我虽然使用另一个变量来保存第二高的值,但在那种情况下,我需要使用另外两个变量:second_max_i 和 second_max_j(代码变得困惑)。

我知道如何用另外两个循环来做到这一点(迭代以找到第二名并进行比较),但是有没有办法只用两个循环(而不是四个)来做到这一点?

最佳答案

如果您遇到另一个与当前最大值具有相同值的元素,您可以通过跟踪来做到这一点。如果这样做,请设置一个“平局”标志。每当找到新的最大值时,清除“平局标志”,如下所示:

int max = matrix[0][0], max_i = 0, max_j = 0, tie = 0;

for(int i = 0; i < 10; i++) {
for(int j = 0; j < 10; j++) {
if(matrix[i][j] == max) {
tie = 1;
}
else if(matrix[i][j] > max) {
max = matrix[i][j];
tie = 0;
max_i = i;
max_j = j;
}
}
}

如果 tie == 1,则可以返回 -1。

编辑添加:请注意,使用当前代码,您初始化 int max = matrix[0][0],并且您检查的第一个元素也是 matrix[0][ 0]。因此,如果 matrix[0][0] 是您的最大元素,您将错误地检测到平局。为防止这种情况,如果您知道矩阵永远不会包含低于某个值的值,则可以将 max 初始化为低于该值的值。例如,如果您可以保证矩阵只包含非负整数,则可以初始化 int max = -1

关于c - 在处理并列情况的同时在矩阵中找到最大值 [在 C 中],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50777968/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com