题目描述
在微分方程中,沿着某一方向是稳定的,另一条方向是不稳定的奇点,叫做鞍点。在泛函中,既不是极大值点也不是极小值点的临界点,叫做鞍点。在矩阵中,一个数在所在行中是最大值,在所在列中是最小值,则被称为鞍点。在物理上要广泛一些,指在一个方向是极大值,另一个方向是极小值的点。编写一个程序,找出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");
}
I . 鞍点
Description
找出二维数组aa的“鞍点”,即该位置上的元素在该行上最大,在该列上最小。
Input
输入数据有多行,第一行有两个数mm和nn,下面有mm行,每行有nn个数。
Output
按下列格式输出鞍点:
ii jj xx
其中,xx代表鞍点,ii和jj为鞍点所在的数组行和列下标,我们规定数组下标从0开始。
一个二维数组并不一定存在鞍点,此时请输出None。
Samples
Input 复制
3 3 1 2 3 4 5 6 7 8 9
Output
0 2 3
Hint
1≤m,n≤101≤m,n≤10。数据中的元素在int范围内
提示:可能存在多个鞍点,请在每一行输出一个。
#include <stdio.h>
#include<math.h>
int main()
{
int a[11][11],m,n,i,j,max[11],min[11],flag=0;
scanf("%d %d",&m,&n);
for(i=0;i<m;i++){
for(j=0;j<n;j++){
scanf("%d",&a[i][j]);
if(j==0)
max[i]=a[i][0];
if(i==0)
min[j]=a[0][j];
if(max[i]<a[i][j])
max[i]=a[i][j];
if(min[j]>a[i][j])
min[j]=a[i][j];
}
}
for(i=0;i<m;i++){
for(j=0;j<n;j++){
if(a[i][j]==max[i]&&a[i][j]==min[j]){
printf("%d %d %d\n",i,j,a[i][j]);
flag=1;
}
}
}
if(!flag)
printf("None");
}