c语言二维数组鞍点是a[0][4]不知道哪里错了
#include<stdio.h>int main(){ int a[4][5],max[4][5]={0},min[4][5]={0},i,j,c,x,n; c=0; printf("please input matrix: "); for(i=0;i<4;i++) for(j=0;j<5;j++) scanf("%d",&a[i][j]); for(i=0;i<4;i++) {x=a[i][0]; for(j=0;j<5;j++) {if(x<a[i][j])max[i][j]=a[i][j]; } } for(j=0;j<5;j++) {n=a[0][j]; for(i=0;i<4;i++) {if(n>a[i][j])min[i][j]=a[i][j]; } } for(i=0;i<4;i++) for(j=0;j<5;j++) if(min[i][j]!=0 && max[i][j]!=0)printf("a[%d][%d]",i,j),c=1; if(c==0)printf("nothing"); return 0;}
对你的程序作了简化和修改,去除了数组max[4][5]和min[4][5],增加了循环变量k,能够找出鞍点了:
完整的程序如下:
#include<stdio.h>
int main()
{
int a[4][5],i,j,k,c,x,xj,n;
c=0;
printf("please input matrix: ");
for(i=0;i<4;i++)
for(j=0;j<5;j++)
scanf("%d",&a[i][j]);
for(i=0;i<4;i++)
{
x=a[i][0];
xj = 0;
for(j=0;j<5;j++)
{
if(x<a[i][j])
{
x=a[i][j];
xj=j;
}
}
c=1;
for(k=0;k<4;k++)
{
if (x>a[k][xj])
c= 0;
continue;
}
if (c)
{
printf("Saddle point exists a[%d][%d]=%d",i,xj,x);
break;
}
}
if (!c)
printf("nothing");
return 0;
}