鞍点 C/C++

来源:百度知道 编辑:UC知道 时间:2024/06/05 15:08:51
烦请大家帮我看一下这个程序有什么问题,
这是一个关于输入一个二位数组的鞍点的程序
鞍点就是一行中最大一列中最小的点
#include<iostream>
#include<stdio.h>
using namespace std;
#define M 5
void main()
{
int a[M][M],an[M];
int m,n,flag=0,s=0;
for(int i=0;i<M;i++)
{
cout<<"请输入一行数字:"<<endl;
for(int j=0;j<M;j++)
cin>>a[i][j];
}
for(i=0;i<M;i++)
{
for(int j=0;j<M;j++)
printf("%4d",a[i][j]);
cout<<endl;
}
for(i=0;i<M;i++)
{
for(int j=1;j<M;j++)
{
if(a[i][j]>=a[i][j-1])
{
an[i]=a[i][j];
m=i,n=j;
}
else
{
an[i]=a[i][j-1];
m=i,n=j-1;
}
}
for(int k=0;k<M;k++)
{
if(an[i]<=a[k][n])
flag=1;
else
flag=0;
}
if(flag==1)
{
s++;
cout<<"第"

for(i=0;i<M;i++)
{
for(int j=1;j<M;j++)
{
if(a[i][j]>=a[i][j-1])
{
an[i]=a[i][j];
m=i,n=j;
}
else
{
an[i]=a[i][j-1];
m=i,n=j-1;
}
}

你求鞍点方法不对
应该是
int han,x(0),lie; //han存放行的最大值,lie是保存han的位置
for(i=0;i<M;i++) //第i行
{
han=a[i][0];
for(j=1;j<M;j++) //求第i行最大值,(两个相等,是不是取第一个)
{
if (han<a[i][j]) {han=a[i][j];lie=j;)
} //循环完毕,han是第i行最大值
for (k=0;k<M;k++)
{
if (han>a[k][lie]) break; //han不是列的最小值,
}
if (k==M) an[x++]=han; //正常退出,说明han是列的最小值,改值保存
}
注意符合的总个数是x-1个

你对鞍点理解有误。