问题 AV: 找鞍点

时间限制: 1 Sec  内存限制: 128 MB
提交 状态

题目描述

在微分方程中,沿着某一方向是稳定的,另一条方向是不稳定的奇点,叫做鞍点。在泛函中,既不是极大值点也不是极小值点的临界点,叫做鞍点。在矩阵中,一个数在所在行中是最大值,在所在列中是最小值,则被称为鞍点。在物理上要广泛一些,指在一个方向是极大值,另一个方向是极小值的点。编写一个程序,找出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");
 
 } 

扫描二维码关注公众号,回复: 13233047 查看本文章

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");
}

猜你喜欢

转载自blog.csdn.net/qing9611/article/details/121410562
今日推荐