C程序题目:找出一个二维数组中的鞍点 即该位置上的元素在该行上最大,在该列上最小。也可能没有鞍点。

2025-04-04 06:53:20
推荐回答(3个)
回答1:

思路:遍历矩阵的每一行,找出最大值,在最大值对应的列找最小值,然后判断最大值和最小值的位置是否相等。具体代码如下:


#include 
#include

void FindSaddlePoint(int a[][20], int m, int n);

main()
{
int a[20][20];  //数组储存矩阵
int m,n;  //分别表示矩阵的行数和列数
int i,j;  //循环变量

//人机交互输入数据
printf("Input m,n:\n");
scanf("%d,%d",&m,&n);
printf("Input matrix:\n" );
for(i=0;i {
for(j=0;j scanf("%d",&a[i][j]);
}

FindSaddlePoint(a,m,n);

system("pause");
}

//函数功能:输入矩阵数组、行数和列数,判断是否存在鞍点并输出结果
void FindSaddlePoint(int a[][20], int m, int n)
{
int i,j,k;  //循环变量
int b,c,d;  //储存下标:b和d储存最大值的下标,d储存最小值的下标
int flag=0;  //判断是否有鞍点:值为1则有,值为0则无
int max,min;  //每行中的最大值和每列中的最小值

//第一层循环遍历每一行
for(i=0;i {
//先该行中的第一个数赋值给最大值并保存其位置
max=a[i][0];
b=i;
d=0;

//找出每一行中的最大值的值及位置
for(j=0;j {
if(max {
max=a[i][j];
b=i;
d=j;
}
}

//先将找到的最大值赋值给最小值,作为初值并存储下标(由于列是一样的所以只需要储存行的位置即可)
min=max;
c=b;
//从找到的最大值中的那一列找该列的最小值并存储其位置
for(k=0;k {
if(min>a[k][d])
{
min=a[k][d];
c=k;
}
}

//判断最大值和最小值的位置是否相同
if(b==c)
{
flag=1;
break;
}
}
//输出语句
if(flag==1)
printf("a[%d][%d] is %d\n",b,d,max);
else
printf("No saddle point!\n");
}

回答2:

你可以看看最大的周围四个数有没有相等的,有相等的你可以认为不是鞍点。

你给的链接的程序有严重的问题,你看下面两个输入,原则上矩阵相似的,如果说一个有鞍点,另一个也应该认为有鞍点。

请输入数组元素:
    3    3    1
    4    2    6
    7    1    9
a[0][0]=3

而如果这样输入

请输入数组元素:
    3    3    1
    2    4    6
    1    7    9
不存在鞍点!

回答3:

#include
using namespace std;
int n,a[10][10];
bool max(int h,int i){
    for(int m=0;m        if(a[h][i]>=a[h][m]){
            if(m==n-1){
                return true;
            }
            else continue;
        }
        else break;
    }
    return false;

}
bool min(int h,int i){
    for(int m=0;m        if(a[h][i]<=a[m][i]){
            if(m==n-1){
                return true;
            }
            else continue;
        }
        else break;
    }
    return false;

}
int main(){
    int h,i,t=0;
    cin>>n;
    for(h=0;h        for(i=0;i            cin>>a[h][i];
        }
    }
    for(h=0;h        for(i=0;i            if(max(h,i)&&min(h,i)){
                cout<                t++;
            }
        }
    }
    if(t==0)cout<<"NONE";
}