首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于鞍点的有关问题

2012-03-17 
关于鞍点的问题#include iostreamusing namespace std#define M 4#define N 4void main(){int a[M][N],

关于鞍点的问题

#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("没有鞍点") ;

热点排行