6.10 找出一个n阶方阵中的鞍点。如果找到鞍点,输出它的下标,没有鞍点,输出NO。其中,n为小于6大于0的正整数。鞍点上的元素其值在该行最大,在该列上最小。

测试用例:

int matrix[5][5]={{5,3,2,4,0}, {2,3,5,0,4}, {0,4,8,4,5}, {9,3,5,10,4}, {3,4,4,4,3}};
没有鞍点
int matrix[5][5]={{5,3,2,11,0}, {2,3,5,20,4}, {0,4,8,25,5}, {9,3,5,10,4}, {3,4,4,14,3}};
找到鞍点A[3][3]=10
int matrix[5][5]={{5,15,2,11,0}, {2,23,5,20,4}, {0,24,8,25,5}, {9,18,5,10,4}, {3,15,4,14,3}};
找到鞍点A[0][1]=15
找到鞍点A[4][1]=15

#include<stdio.h>
#define M 5
#define N 5
int matrix[5][5] = { { 5,15,2,11,0 },{ 2,23,5,20,4 },{ 0,24,8,25,5 },{ 9,18,5,10,4 },{ 3,15,4,14,3 } };

int main(void)
{
    int flag = 0;
    for (int i = 0; i < M; i++)  // 先找行的最大值
    {
        int max = matrix[i][0];
        for(int j=1;j<N;j++)  // 找到最大值
            if (matrix[i][j] > max)
                max = matrix[i][j];
        
        for (int j = 1; j < N; j++)  // 遍历最大值
        {
            if (matrix[i][j] == max)
            {    
                int r = 0;
                for (; r < M; r++)  // 验证这个数是不是该列的最小值
                {
                    if (matrix[r][j] < max)
                        break;
                }
                if (r == M)  // 如果找到数组末尾都没有找到比它小的值,那它就是最小值
                {
                    printf("找到鞍点A[%d][%d] = %d\n", i, j, matrix[i][j]);
                    flag = 1;  // 说明有鞍点
                }
            }
        }
    }
    if (flag == 0)  // 如果没有鞍点
        printf("没有鞍点\n");

    return 0;
}

 

说点什么

avatar

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

  Subscribe  
提醒