编写程序,找出二维数组中的鞍点,即该位置上的元素在该行上最大,在该列上最小。要求使用C语言,不是C++

 我来答
浮衍1374
2012-12-13 · TA获得超过121个赞
知道答主
回答量:144
采纳率:99%
帮助的人:59.7万
展开全部

设计思路:

使用两个相同的二维数组,一个存数据,一个存是鞍点的可能性,可能性若为0,则不是鞍点;若为1,则不是鞍点,但是行最大数或者列最小数;若为2,则是鞍点;

首先,获取每行最大数,并赋给max,并将改行中与max相等的数是鞍点的可能性设为1,其他数的可能性设为0;

其次,获取每列最小数,并赋给min,并将该列中与min相等的数是鞍点的可能性增加1;

最后,判断每个数是鞍点的可能性,若是2,则是鞍点,输出。


流程图自己画吧


#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#define ROW     3

#define COL    3

void main()

{

    int a[ROW][COL];

    int flag[ROW][COL];    //记录每个元素是鞍点的可能性,

    int i, j, max, min, count=0;

    printf("输入数组内容(%d行%d列):\n", ROW, COL);

    for (i=0; i<ROW; i++)

    {

        for (j=0; j<COL; j++)

        {

            scanf("%d", &a[i][j]);

        }

    }

    for (i=0; i<ROW; i++)  //查找每行最大数, 并设置每个数是鞍点的可能性

    {

        max = a[i][0];

        for (j=1; j<COL; j++)

        {

            max = (max < a[i][j])?a[i][j]:max;

        }

        for (j=0; j<COL; j++)

        {

            if (a[i][j] == max)//若是最大数,则鞍点可能性设为1,否则为0

                flag[i][j] = 1;

            else

                flag[i][j] = 0;

        }

    }

    for (j=0; j<COL; j++) //查找每列最小数,并设置每个数是鞍点的可能性

    {

        min = a[0][j];

        for (i=1; i<ROW; i++)

        {

            min = (min > a[i][j])?a[i][j]:min;

        }

        for (i=0; i<ROW; i++)

        {

            if (a[i][j] == min)//若是最小数,则鞍点可能性增加1

            {

                flag[i][j]++;

                count++;

            }

        }

    }

    printf("鞍点个数为:%d \n", count);

    for (i=0; i<ROW; i++)  //输出鞍点信息

    {

        for (j=0; j<COL; j++)

        {

            if (flag[i][j] == 2)

                printf("%d, (%d行%d列)\n", a[i][j], i, j);

        }

    }

    return;

}


老男孩KISS
2023-03-07 · ERP及电脑相关知识都可以
老男孩KISS
采纳数:36 获赞数:48

向TA提问 私信TA
展开全部
以下是一个用 C 语言编写的寻找二维数组鞍点的程序:
#include <stdio.h>
#define ROW 3
#define COL 3
int main() {
int arr[ROW][COL] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
int rowMax, colMin, flag;
for (int i = 0; i < ROW; i++) {
rowMax = 0;
flag = 1;
for (int j = 0; j < COL; j++) {
if (arr[i][j] > arr[i][rowMax]) {
rowMax = j;
}
}
colMin = 0;
for (int k = 0; k < ROW; k++) {
if (arr[k][rowMax] < arr[colMin][rowMax]) {
colMin = k;
}
}
if (colMin == i) {
printf("鞍点坐标:(%d, %d)\n", i, rowMax);
flag = 0;
}
}
if (flag) {
printf("该二维数组不存在鞍点。\n");
}
return 0;
}

程序中,首先定义了一个 $3 \times 3$ 的二维数组 arr 作为样例数据。接着,程序使用两个变量 rowMax 和 colMin 记录当前行的最大值和当前列的最小值,再用一个变量 flag 标志是否存在鞍点。接下来,程序使用两个嵌套的 for 循环遍历数组,分别找到每一行的最大值和每一列的最小值,并判断当前列的最小值是否等于当前行的最大值,如果等于,就说明找到了一个鞍点。最后,程序通过 flag 变量判断是否存在鞍点,如果不存在,就输出一个提示信息。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式