#include<stdio.h>
int main()
{
int a[4][5],i,j,i1,j1=0,max,s=1; /*i和j是行和列的循环变量,i1和j1是一行中横向最大值所在的行标和列标,s是鞍点是否存在的标示量*/
for(i=0;i<=3;i++)
{
for(j=0;j<=4;j++)
scanf("%d",&a[i][j]);
}
printf("输入的数组:\n");
for(i=0;i<=3;i++)
{
for(j=0;j<=4;j++)
printf("%5d",a[i][j]);
printf("\n");
}
printf("\n");
for(i=0;i<=3;i++)
{
i1=i;
max=a[i1][j1];
for(j=1;j<=4;j++)
{
if(max<a[i][j])
{
max=a[i][j];
j1=j;
}
}
for(i=0;i<=3;i++)
if(max>a[i][j1])break;
if(i>3)
{
printf("a[%d][%d]=%d\n",i1,j1,max);
s=0;
}
}
if(s)
printf("不存在鞍点.\n");
return 0;
}
输入一个鞍点存在的数组,输出是正确的
但输入一个暗点不存在的数组,却没有输出,请问错在哪里?
还有如果数组中所有元素都是1,这个数组有鞍点吗?
鞍点,既该位置上的元素在该行上最大、在该列上最小,也可能没有鞍点。
sample input
1 2 3 4 5回车2 4 6 8 10回车3 6 9 12 15回车4 8 12 16 20回车
sample output
a[0][4]=5
sample input
1 12 3 4 5回车2 4 16 8 10回车3 6 9 12 15回车4 8 12 16 20回车
sample output
鞍点不存在.
#include<stdio.h>
int main()
{
int a[4][4]={{2,3,9,5},{6,7,8,3},{0,5,7,5},{2,1,8,3}};
int i,j,k,i0,j0,find=0;
printf("数组a:\n");
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
printf("%3d",a[i][j]);
printf("\n");
}
for(i=0;i<4;i++) //穷举所有的行
{
j0=0;
for(j=1;j<4;j++)
if(a[i][j]>a[i][j0])j0=j; //找到第i行上最大的数a[i][j0]
k=1;
for(i0=0;i0<4;i0++) //对找到的该数穷举所有行
if(a[i0][j0]<a[i][j0])k=0; //如它不是本列上最小的数就“一票否决”
if(k) //若确认是,就输出,并记录已找到
{
printf("鞍点是:a[%d][%d]=%d\n",i,j0,a[i][j0]);
find=1;
}
}
if(!find) //若未找到,则输出提示信息
printf("此数组无鞍点!\n");
return 0;
}