(C语言简单易懂) 找出一个二维数组的鞍点

  • Post author:
  • Post category:其他


#include<stdio.h>
#define x 3   //二维数组的行数
#define y 4   //二维数组的列数
int main()
{
	int i,j,max,maxj,min,flag=1;  //定义变量
	int arr[x][y];
	printf("请输入一个%d*%d数组\n",x,y);
	for(i=0;i<x;i++)  
	  for(j=0;j<y;j++)
	  scanf("%d",&arr[i][j]); //初始化二维数组
	for(i=0;i<x;i++)
	{
		max=arr[i][0];  //设一行中第一个为该行的最大值
		maxj=0;     //初始化
		for(j=0;j<y;j++)
			if(arr[i][j]>max)
			{max=arr[i][j];maxj=j;}//找出一行中最大的数字并找出其列号下标
			min=arr[i][maxj];  //设一行中最大值为其所在列最小值
			for(j=0;j<x;j++)
				if(arr[j][maxj]<min)//判断是否满足为一列中最小值
					break;
			if(j>=x)
			{
             printf("二维数组的鞍点为arr[%d][%d]=%d\n",i,maxj,max);
             flag=0;//作为判断有鞍点的依据
            }
	 }
	if(flag)    //整个二维数组没有鞍点
	printf("该二维数组没有鞍点\n");
	return 0;
}

运行示例:

鞍点的定义:

该位置的元素在该行上最大、在该列上最小。

解题思路:

设一行中第一个为该行的最大值,找出一行中最大的数字并找出其列号下标,设一行中最大值为其所在列最小值,判断该数是否满足为一列中最小值,满足则为鞍点,不满足就不是鞍点。



版权声明:本文为m0_63699649原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。