题目描述
在微分方程中,沿着某一方向是稳定的,另一条方向是不稳定的奇点,叫做鞍点。在泛函中,既不是极大值点也不是极小值点的临界点,叫做鞍点。在矩阵中,一个数在所在行中是最大值,在所在列中是最小值,则被称为鞍点。在物理上要广泛一些,指在一个方向是极大值,另一个方向是极小值的点。编写一个程序,找出n×m的矩阵a的鞍点,若存在必唯一,不存在则输出“Not Found”。
输入
有多行。第1行是两个整数n(n≤10)和m(m≤10),表示矩阵有n行m列。接下来n行,每行包含m个整数,表示矩阵值。
输出
仅一行。如果鞍点存在,则按指定格式输出鞍点;否则,输出“Not Found”。
样例输入 Copy
3 4 1 2 13 4 7 8 10 6 3 5 9 7
样例输出 Copy
a[2][2]=9
#include<stdio.h>
int main ()
{
int m,n,a[10][10],b,h,l,i,j,k=0,c,d,max,min;
scanf("%d %d",&m,&n);
for(i=0;i<m;i++){
for(j=0;j<n;j++)
scanf("%d",&a[i][j]);
}
for(b=0;b<m;b++){ //从0行考虑 ,找这行的最大值
int e=0; //每次循环赋初值
max=a[b][0];
h=b; //记录行
l=0;
for(i=0;i<n;i++){
if(max<a[b][i]){
max=a[b][i];
l=i; //记录列
}
}
min=a[h][l]; //在l列该值最小 ,比较判断
for(j=0;j<m;j++){
if(min>a[j][l]){
e++;
}
}
if(e==0){
printf("a[%d][%d]=%d",h,l,min);
k++;
}
}
if(k==0) //鞍点的个数
printf("Not Found");
}