C语言 矩阵/数组 马鞍点查找

题目:
在矩阵中,一个数在所在行中是最大值,在所在列中是最小值,则被称为鞍点。
编程思维
首先我们需要寻找行最大值,然后确定行最大值所在列。然后再所在列寻找最小值。根据判断两次找到的数是否相等,行列信息是否一致来确定是否是马鞍点。然后继续进行查找下一行是否有马鞍点,直至所有行都查询结束。
源程序

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

#define N 10 //用于设定初始二维数组的大小

void Search_point(char num[10][10],int n)
{
	int Max = 0,Min = 0,temp_l = 0,temp_h = 0;
	int flag;
	for(int i = 0;i < n;i++)
	{
		Max = num[i][0];
		for(int j = 0;j < n;j++)//寻找行最大。记录最大值所在列 
		{
			if(num[i][j] > Max)	
			{
				Max = num[i][j];
				temp_l = j;
				Min = num[i][j]; 
			}
		}
		
		for(int k = 0;k < n;k++)//寻找列最小。 记录最小值所在行 
		{
			if(num[k][temp_l] < Min)
			{
				Min = num[k][temp_l];temp_h = k;
			}	
		}
		if(Min == Max && Max == num[temp_h][temp_l])//判断两次查找到的数据是否相等,且行列信息是否一致。
		{
			printf("马鞍点位置为第%d行,第%d列",temp_h+1,temp_l+1);
			flag = 1;
			break;
		} 
	}
	if(flag == 0)printf("不存在马鞍点");
} 

int main() {
	char num[N][N] = {};
	char n;
	int i,j,k;
	printf("请输入矩阵的阶数\n");
	scanf("%d",&n);
	printf("请输入具体数值\n");
	for(i = 0;i < n;i++)
	{
		for(j = 0;j < n;j++)
		{
			scanf("%d",&num[i][j]);
		}
	}
	Search_point(num,n);
	return 0;
}

运行结果
在这里插入图片描述

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐