找出一个二维数组中的鞍点(C语言)
题目要求:如标题,鞍点即该位置上的元素在该行上最大、该列上最小,也可能没有鞍点
思路:
- 先找出每行中的最大值,并且确定其位置
- 然后判断该位置的值是否为该列中最小:如果找到比它小的值,则break跳出循环。若始终没break跳出循环,则说明没找到,那么这个数就是鞍点;如果有break跳出循环,那么这个数就不是鞍点
以下为具体代码:
#include <stdio.h>
int main()
{
int m,n;
printf("Please enter a matrix's row and column: \n");
scanf("%d %d",&m,&n);
int array[m][n];
int i,j;
printf("Please enter a %d rows, %d columns matrix: \n",m,n);
for(i=0;i<=m-1;i++)
for(j=0;j<=n-1;j++)
scanf("%d",&array[i][j]);
int k,max,max_j;
for(i=0;i<=m-1;i++)
{
max=array[i][0];
max_j=0;
for(j=1;j<=n-1;j++)
{
if(max<array[i][j])
{
max=array[i][j];
max_j=j;
}
}
for(k=0;k<=m-1;k++)
{
if(max>array[k][max_j])
break;
}
if(k>=m)
{
printf("The result is: array[%d][%d]=%d\n",i,j,max);
break;
}
else
{
printf("There is no result.\n");
break;
}
}
return 0;
}