我把矩阵设为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],但是运行没有结果,还请哪位高手看看,究竟错在哪呢??所谓鞍点,就是指该位置上的元素在该行上最大,在该列上最小。
// 下面是你的代码 我加了个 注释 #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); } } } }}