数组-查找矩阵鞍点(二维矩阵的行数和列数在输入时确定)

该博客介绍如何在二维矩阵中查找鞍点,即元素在所在行最大且在所在列最小。程序需处理不同行数和列数的矩阵,并通过样例输入输出展示了算法的正确性。
摘要由CSDN通过智能技术生成

数组-查找矩阵鞍点(二维矩阵的行数和列数在输入时确定)

【问题描述】找出一个矩阵的“鞍点”,即鞍点元素在所在行上最大,在其所在列上最小。也可能没有鞍点。

   两组样例数据:

①二维数组有鞍点

9     80     205    40   

90   -60     777     1

210   -3    888    89

②二维数组没有鞍点

9     80    205    40

90   -60    196     1 

210   -3    101    89

45    54    156     7 

从键盘输入数组各元素的值,检查结果是否正确。题目未指定二维数组的行数和列数,程序应能处理任意行数和列数的数组。

【输入形式】
【输出形式】
【样例输入1】

3 5

1 3 9 4 6

2 1 11 1 2

3 3 10 3 3

【样例输出1】Saddle Point is row=1,column=3,num is 9

【样例输入2】

3 5

1 3 5 4 6

2 1 11 1 2

3 3 10 3 3

【样例输出2】no Saddle Point!

仅供参考

#include <iostream>

using namespace std;

int main()
{
   
    int M,N;
    cin>>M>>N;
    int a[M][N],lmax=0,hmin=0,min,max;
    bool b=0;
    for(int i=0;i<M;i++)
    {
   
        for(int j=0;j<N;j++)
        cin>>a[i][j];
    
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个实现该功能的 C 语言程序: ```c #include <stdio.h> #define MAX_ROW 100 #define MAX_COL 100 int main() { int array[MAX_ROW][MAX_COL]; int row, col; int i, j; int max_row, min_col; int is_saddle_point; // 输入二维数组 printf("请输入二维数组行数列数:"); scanf("%d%d", &row, &col); printf("请输入二维数组的元素:\n"); for (i = 0; i < row; i++) { for (j = 0; j < col; j++) { scanf("%d", &array[i][j]); } } // 查找鞍点 for (i = 0; i < row; i++) { max_row = 0; for (j = 1; j < col; j++) { if (array[i][j] > array[i][max_row]) { max_row = j; } } is_saddle_point = 1; for (j = 0; j < row; j++) { if (array[j][max_row] < array[i][max_row]) { is_saddle_point = 0; break; } } if (is_saddle_point) { min_col = 0; for (j = 1; j < row; j++) { if (array[j][max_row] < array[min_col][max_row]) { min_col = j; } } if (i == min_col) { printf("鞍点为 (%d, %d),值为 %d\n", i, max_row, array[i][max_row]); } } } return 0; } ``` 该程序首先通过 `scanf` 函数从键盘输入二维数组行数列数,然后再依次输入二维数组中各个元素的值。程序通过两层嵌套循环遍历整个二维数组,对于每行找到最大值的列,再判断该列上是否为该列上最小值,若是则找到了一个鞍点。 运行程序输入的第一行应包含两个数字,分别为二维数组行数列数。接下来是一个 row 行 col 列的矩阵,包含了二维数组的所有元素。程序输出每个鞍点的位置和值。如果输入二维数组中没有鞍点,则程序不会有任何输出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值