矩阵中的鞍点问题

题目:由键盘输入一个3*4(3行4列)的矩阵,输出矩阵中的鞍点(即在矩阵行中最大,列中最小的数)。若没有鞍点,输出“NO”字样。
输入样例
87 90 110 98
70 97 210 65
98 45 120 30

输出样例
110
【分析】行号i: 0-2;列号j:0-3;
解决方式:
1.找出每行最大值
2.找出最大值所对应的的列中,这个值是否为该列最小值;如果是,那么为鞍点。
3.每行都没有鞍点,该矩阵木有鞍点
实现步骤:
行号for循环i=0 to 2
列号j循环:找出该行最大值
把最大值所在列号给colum,并把最大值给max
for行号循环:找出max所在的列中的最小值
把最小值给min,并记录此时行号在row
如果max==min,则输出鞍点a[row][col],break进入下一个行号的大循环
如果大的for循环结束后,依旧max不等于min
则,没有鞍点

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int a[3][4];
    int i,j,k,max,min;
    int row=0,col=0;//row行的意思,colum列的意思
    for(i=0;i<3;i++)//键入数组的循环
    {
        for(j=0;j<4;j++)
        {
            scanf("%d",&a[i][j]);
        }
    }
    for(i=0;i<3;i++)//对比大小
    {
        max=a[i][0];//每一行取最大的数,先把初始max全给首列元素
        for(j=0;j<4;j++)
        {
            if(a[i][j]>max)
            {
                max=a[i][j];
                col=j;//找出每一行当中最大的数
            }
        }
        min=a[0][col];//将刚刚找出的行最大的那个数所属的列进行对比
        for(k=0;k<3;k++)
        {
            if(min>a[k][col])
            {
               min=a[k][col];
               row=k;
            }
        }
        if(max==min)
        {
            printf("%d\n",a[row][col]);
            break;
        }
    }
    if(min!=max) printf("NO");
    return 0;
}

终于写完,发出努力学习的声音~ 吧唧~
在这里插入图片描述

发布了15 篇原创文章 · 获赞 4 · 访问量 335

猜你喜欢

转载自blog.csdn.net/pipi_lovelygirl/article/details/104935034