读书人

关于鞍点的有关问题

发布时间: 2012-03-17 19:06:28 作者: rapoo

关于鞍点的问题

#include <iostream>
using namespace std;
#define M 4
#define N 4
void main()
{
int a[M][N],i,j,m,n,i1,j1,m1,n1,x1,y1,x2,y2;
int min,max;
cout<<"请输入数据:"<<endl;

for (i=0;i<M;i++)
{
for (j=0;j<N;j++)
cin>>a[i][j];
}
cout<<"输入的矩阵为:"<<endl;
for (i=0;i<M;i++)
{
for (j=0;j<N;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}

//a[x1][y1]={0};a[x2][y2]={0};
cout<<"行最大值有:"<<endl;
for (i=0;i<M;i++)
{
max=a[i][0];
for (j=0;j<N;j++)
{
if(a[i][j]>=max)
{ max=a[i][j]; i1=i; j1=j; }
}

cout<<"a["<<i1<<"]"<<"["<<j1<<"]: "<<max<<endl;

}
cout<<"列最小值有:"<<endl;

for (n=0;n<N;n++)
{
min=a[0][n];
for (m=0;m<M;m++)
{
if(a[m][n]<=min)
{ min=a[m][n]; m1=m; n1=n; }
}

cout<<"a["<<m1<<"]"<<"["<<n1<<"]: "<<min<<endl;
}

if (max==min)
cout<<"满足条件的有:"<<"a["<<i1<<"]["<<j1<<"]: "<<min<<endl;
else
cout<<"不存在:"<<endl;

}
为什么我输入5 1 1 1
6 2 2 2
7 3 3 3
8 4 4 4
输出的怎么是不存在。鞍点不是5吗

[解决办法]
你的max不是数组中最大的值,而是最后一行中最大的值。
你的min不是数组中最小的值,而是最后一行中最小的值。

求最大值和最小值的这两个for循环不是单独的,要嵌套起来用。
在第一行找到一个最大值,然后判断这个值是不是所在列的最小值,是的话就是鞍点,不是的话就在第二行继续找第二行的最大值,然后判断这个值是不是所在列的最小值,是的话就是鞍点,不是的话就继续在下一行以同样的方法找。


[解决办法]
int flag ;

for (i=0;i<M;i++)
{
max=a[i][0];
for (j=0;j<N;j++)
{
if(a[i][j]>=max)
{
max=a[i][j];
j1=j;
}
}

min=a[0][j1];
for (n=0;n<N;n++)
{
if(a[n][j1]<=min)
min=a[n][j1];
}
if(min == max)
{
flag = 1 ;
break ;
}
}
if(flag == 1)
printf("鞍点是%d" , max) ;
else
printf("没有鞍点") ;

读书人网 >C语言

热点推荐