自学内容网 自学内容网

每日一题——第一百一十六题

题目:找到一个3x3二维数组中的鞍点。该值满足在所在行最大,所在列最小

#include<stdio.h>
#include<stdbool.h>
#include<limits.h>
void findSaddlePoints(int arr[3][3], int rows, int cols);
int main() {
int arr[3][3] = {
{1, 7, 4},
{4, 5, 3},
{2, 6, 8}
};

findSaddlePoints(arr, 3, 3);

return 0;
}

/// <summary>
/// 查找并打印鞍点
/// </summary>
/// <param name="arr"></param>
/// <param name="rows"></param>
/// <param name="cols"></param>
void findSaddlePoints(int arr[3][3], int rows, int cols) {
int maxRow[3];//存储每行的最大值
int colIndex[3];//存储每行最大值的列索引
bool hasSaddle = false;//标记是否已经找到的鞍点
int i, j;

//找到每行的最大值并记录最大值的列索引
for ( i = 0; i < rows; i++)
{
maxRow[i] = INT_MIN;//初始化每行的最大值
for ( j = 0; j < cols; j++)
{
if (arr[i][j] > maxRow[i])//如果当前值大于该行的最大值
{
maxRow[i] = arr[i][j];//更新当前行的最大值
colIndex[i] = j;//记录当前最大值的列索引
}
}
}

//检查乜每个行的最大值是否满足在其所在列中最小
for ( i = 0; i < rows; i++)
{
bool isMinInCol = true;//标记是否是当前列中最小值

for ( j = 0; j < rows; j++)
{
if (arr[j][colIndex[i]] < maxRow[i])//如果当前行元素的最大值不是该列的最小值
{
isMinInCol = false;
break;
}
}

//如果当前行最大元素所在列元素均比较完成判断
if (isMinInCol) 
{
printf("存在鞍点位于:(%d, %d), 值为 %d\n", i, colIndex[i], maxRow[i]);
hasSaddle = true; //标记找到了鞍点
}
}


//如果hasSaddle = false,则不存在鞍点
if (!hasSaddle)
{
printf("数组中不存在鞍点。\n");
}

}

原文地址:https://blog.csdn.net/weixin_45778846/article/details/142917524

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!