找每一行的最大值,每一列的最小值。B2102 计算鞍点

给定一个 5x5的矩阵,每行只有一个最大值,每列只有一个最小值,寻找这个矩阵的鞍点。鞍点指的是矩阵中的一个元素,它是所在行的最大值,并且是所在列的最小值。

例如:在下面的例子中,第 4 行第 1 列的元素就是鞍点,值为 8.。

11 3 5 6 9
12 4 7 8 10
10 5 6 9 11
8  6 4 7 2
15 10 11 20 25

 输入:

11 3 5 6 9
12 4 7 8 10
10 5 6 9 11
8  6 4 7 2
15 10 11 20 25

输出:

4 1 8

代码如下:

#include<bits/stdc++.h>
using namespace std;
int a[10][10],maxi[10][10],mini[10][10]; 
int main(){
    for(int i=1;i<=5;i++)
        for(int j=1;j<=5;j++)
            cin>>a[i][j];
    for(int i=1;i<=5;i++){  //找每一行中的最大值,行保持不变,列发生变化
        int maxii=0,y;   //定义最大值初始化为0,y为所在的列
        for(int j=1;j<=5;j++)
            if(a[i][j]>maxii){ //如果找到行中的最大值 
                maxii=a[i][j];
                y=j; //列等于最大值的列     
            }
        maxi[i][y]=maxii;
    }
    for(int i=1;i<=5;i++){ //找每一列的最小值,列保持不变,行发生变化 
        int minii=1e9,x; //定义最小值初始化为0,x为所在的行 
        for(int j=1;j<=5;j++)
            if(a[j][i]<minii){
                minii=a[j][i];
                x=j;
            }
        mini[x][i]=minii;
    }
    for(int i=1;i<=5;i++)
        for(int j=1;j<=5;j++)
            if(maxi[i][j]!=0&&mini[i][j]!=0){
                cout<<i<<" "<<j<<" "<<maxi[i][j]<<endl;//如果都有值就说明此点是鞍点
                return 0;
            }
    cout<<"not found"<<endl;//没有找到鞍点
    return 0;
}

 

鞍点是矩阵理论中的一个概念,指的是矩阵中的一个元素,它在其所在中是最大的,同时在其所在中是最小的。下面是一个用C语言实现的简单程序,用于寻一个给定二维数组(矩阵)的鞍点: ```c #include <stdio.h> #define MAX_SIZE 10 // 定义矩阵的最大尺寸 int main() { int matrix[MAX_SIZE][MAX_SIZE]; // 声明矩阵 int m, n; // 矩阵的数和数 int i, j, k; int maxRow, minCol; // 用于标记最大值最小值的索引 int saddlePointFound = 0; // 标记是否鞍点 printf("请输入矩阵的数和数(例如:3 3):"); scanf("%d %d", &m, &n); // 读取矩阵元素 printf("请输入矩阵元素,共 %d %d :\n", m, n); for(i = 0; i < m; i++) { for(j = 0; j < n; j++) { scanf("%d", &matrix[i][j]); } } // 寻鞍点 for(i = 0; i < m; i++) { // 假设第i的第一个元素是最大值 maxRow = matrix[i][0]; int maxIndex = 0; // 寻第i最大值 for(j = 1; j < n; j++) { if(matrix[i][j] > maxRow) { maxRow = matrix[i][j]; maxIndex = j; } } // 检查这个最大值是否是所在最小值 minCol = 1; for(k = 0; k < m; k++) { if(matrix[k][maxIndex] < maxRow) { minCol = 0; // 不是最小值,跳出循环 break; } } // 如果是最小值,则为鞍点 if(minCol) { printf("鞍点是: matrix[%d][%d] = %d\n", i, maxIndex, maxRow); saddlePointFound = 1; } } if(!saddlePointFound) { printf("没有鞍点。\n"); } return 0; } ``` 这段代码首先定义了矩阵的大小,然后通过用户输入获取矩阵的数和数以及具体的矩阵元素。之后,代码通过双层循环遍历矩阵的每一行,寻鞍点。 请注意,矩阵的大小在这里被限定为10以内,如果需要处理更大的矩阵,可以适当调整`MAX_SIZE`的定义,并确保数组的分配和输入逻辑相应地进扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值