出错待调试-找出一个二维数组的鞍点,即该位置上的元素在该行上最大、在该列上最小。也可能没有鞍点
发布日期:2021-05-08 15:47:36 浏览次数:20 分类:精选文章

本文共 1448 字,大约阅读时间需要 4 分钟。

重新优化后的代码解释

#include
int main() {
int max, min, point = 0;
int n, m;
int a[4][5] = {
{2, 4, 6, 8, 10},
{1, 2, 3, 4, 5},
{3, 6, 9, 12, 15},
{4, 8, 12, 16, 20}
};
for (i = 0; i < 4; i++) {
max = a[i][0];
n = i;
m = 0;
for (j = 0; j < 5; j++) {
if (a[i][j] > max) {
max = a[i][j];
n = i;
m = j;
}
}
printf("第%d行的最大值为a[%d][%d] = %d\n", i+1, n, m, max);
point = 1;
// 检查该最大值是否是该列的最小值
min = a[n][m];
for (j = 0; j < 5; j++) {
if (a[n][j] < min) {
min = a[n][j];
}
}
if (max == min) {
printf("a[%d][%d] = %d 是鞍点\n", n, m, max);
break;
}
}
if (!point) {
printf("无鞍点\n");
return 0;
}
}

代码解释

  • 初始化变量max 用于记录当前行的最大值,min 用于记录当前列的最小值,point 用于标记是否找到鞍点。
  • 外层循环:遍历每一行(4行)。
  • 内层循环:在每一行中,遍历每一列(5列),找到当前行的最大值及其位置。
  • 打印最大值:输出当前行的最大值及其位置。
  • 检查鞍点:找到当前列的最小值。如果当前行的最大值等于该列的最小值,则为鞍点,输出并退出循环。
  • 处理鞍点不存在的情况:如果遍历完所有行都没有找到鞍点,输出“无鞍点”。
  • 优化说明

  • 简化循环结构:将鞍点检查逻辑单独处理,避免了多次重复循环。
  • 变量命名清晰:通过nm记录最大值所在的行和列,方便后续检查。
  • 优化鞍点检查:在找到最大值后,直接检查该列的最小值,避免不必要的重复计算。
  • 提升代码可读性:通过适当的注释和格式调整,提升代码的可读性,使其他开发者更容易理解代码逻辑。
  • 功能实现

    该代码实现了以下功能:

    • 遍历矩阵中的每一行,找出每行的最大值及其位置。
    • 检查该最大值是否是其所在列的最小值。
    • 如果满足条件,输出鞍点信息并退出程序。
    • 如果遍历完所有行后仍未找到鞍点,输出“无鞍点”信息。

    通过这种优化,代码逻辑更加清晰,功能实现更加准确,避免了之前的逻辑混乱问题。

    上一篇:给出年、月、日,计算该日是该年的第几天?
    下一篇:输出杨辉三角形(要求输出10行)

    发表评论

    最新留言

    网站不错 人气很旺了 加油
    [***.192.178.218]2025年04月16日 00时01分49秒

    关于作者

        喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
    -- 愿君每日到此一游!

    推荐文章