求教:C语言求矩阵的鞍点问题

我把矩阵设为4*4格式:把重复的数字也计算在内,就是说允许一行有多个鞍点(题目没说清楚,我姑且这么认为)
#include <stdio.h>
void main()
{
while(1)
{
int a[4][4];
int j,i,m,t,x,y;
printf("please input sixteen numbers:\n");
for(j=1;j<=4;j++)
for(i=1;i<=4;i++)
scanf("%d",&a[j-1][i-1]);
printf("\n");
for(j=1;j<=4;j++)
{
if(a[j-1][0]>=a[j-1][1])
m=a[j-1][0];
else
m=a[j][1];
for(i=3;i<=4;i++)
if(a[j-1][i-1]>=m)
m=a[j-1][i-1];
for(x=1;x<=4;x++)
{
if(a[j-1][x-1]==m)
{
if(a[0][x-1]<=a[1][x-1])
t=a[0][x-1];
else
t=a[1][x-1];
for(y=3;y<=4;y++)
if(a[y-1][x-1]<=t)
t=a[y-1][x-1];
if(m==t)
printf("此数列的鞍点为元素a[%d][%d],对应数值大小为 %d\n",j-1,x-1,m);
}
}
}
}
}

然后我自己输入了一个4*4的矩阵:(2 9 9 6 4 18 55 5 6 161 73 7 8 32 12 9)按理应该输出a[0][1]和a[0][2],但是运行没有结果,还请哪位高手看看,究竟错在哪呢??
所谓鞍点,就是指该位置上的元素在该行上最大,在该列上最小。
最新回答
花若怜

2024-10-14 08:15:32

// 下面是你的代码 我加了个 注释
#include <stdio.h>
void main()
{
while(1)
{
int a[4][4];
int j,i,m,t,x,y;
printf("please input sixteen numbers:\n");
for(j=1;j<=4;j++)
for(i=1;i<=4;i++)
scanf("%d",&a[j-1][i-1]);
printf("\n");
for(j=1;j<=4;j++)
{
if(a[j-1][0]>=a[j-1][1])
m=a[j-1][0];
else
m=a[j][1]; // 这里出问题了 应该是 m = a[j-1][1];
for(i=3;i<=4;i++)
if(a[j-1][i-1]>=m)
m=a[j-1][i-1];
for(x=1;x<=4;x++)
{
if(a[j-1][x-1]==m)
{
if(a[0][x-1]<=a[1][x-1])
t=a[0][x-1];
else
t=a[1][x-1];
for(y=3;y<=4;y++)
if(a[y-1][x-1]<=t)
t=a[y-1][x-1];
if(m==t)
printf("此数列的鞍点为元素a[%d][%d],对应数值大小为 %d\n",j-1,x-1,m);
}
}
}
}
}