找出一个二维数组的“鞍点”,即该位置上的元素在该行上最大,在该列上最小。可能没有鞍点。

有志者自有千计万计,无志者只感千难万难。加油!


前言

题为c程序设计(第五版)谭浩强 第6章 第8题。


一、题目复现

二、实现步骤

1.思路分析

1.通过scanf输入数组的行数和列数。

2.通过二重循环输入数组的具体元素。

3.初始化标记量flag(一般初始化为0).

4.枚举每一行,找出每一行中最大的元素,并记下其列号。

5.将min的初始值即一开始的对比值初始化为该行的最大值max。

6.找出该列中最小的元素。

7.验证该行中最大的元素和该列中最小的元素是否为同一个元素(即min是否等于max)。

8.如果该位置上的元素在该行上最大,在该列上最小,则输出该位置所在的行号、列号和元素值,并将flag置为1。

9.如果没有鞍点,则输出"NO"。

2.进入实操

代码如下(示例):

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define N 100
int main()
{
    int a[N][N], i, j, k, n, m, max, min, flag;
    printf("请输入矩阵的行数和列数:\n");
    scanf("%d %d", &n, &m); //输入矩阵的行数和列数
    printf("请输入矩阵的元素:\n");
    for (i = 0; i < n; i++) 
    {
        for (j = 0; j < m; j++)
        {
            scanf("%d", &a[i][j]); //输入矩阵元素
        }
    }
    flag = 0; //flag用于标记是否有鞍点
    for (i = 0; i < n; i++) 
    { //枚举每一行
        max = a[i][0]; //max记录该行中最大的元素
        k = 0; //k记录最大元素所在的列号
        for (j = 1; j < m; j++) 
        { //找出该行中最大的元素及其所在列号
            if (a[i][j] > max) 
            {
                max = a[i][j];
                k = j;
            }
        }
        min = max; //min记录该列中最小的元素,初始值为该行中最大的元素
        for (j = 0; j < n; j++)
        { //找出该列中最小的元素
            if (a[j][k] < min) 
            {
                min = a[j][k];
            }
        }
        if (min == max) 
        { //如果该位置上的元素在该行上最大,在该列上最小,则输出该位置所在的行号、列号和元素值,并将flag置为1
            printf("行号:%d 列号:%d 值:%d\n", i + 1, k + 1, max);
            flag = 1;
        }
    }
    if (flag == 0) 
    {
        //如果没有鞍点,则输出"NO"
        printf("NO\n");
    }
    return 0;
}

运行结果如下(示例):


总结

针对该题,主要考察了:

1.标记量的设置。

2.如何找出数组中一行最大的元素。(即那每行的第一个元素去依次比较替换)

3.如何在确定一行中最大元素的同时,确定其是否为该列中最小。(即将比较量(本题中为min)初始化为该行中的最大值元素,然后在该列中依次比较替换。)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fashia

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值