回 帖 发 新 帖 刷新版面

主题:[讨论]数组中求鞍点

[color=FF00FF][size=2]有一个M行N列数组,求它的鞍点(所谓鞍点就是这个数在行中是最大,而在列中是最小)找出并输出此数及其所在的行列号(一个数组中可能有一个鞍点,也有可能有多个鞍点)[/size][/color]

回复列表 (共5个回复)

沙发

设数组为a(n列,m行)
min=a(0,0)
for 列=0 to m-1
   max=a(列,0)
   for 行=1 to n-1
      比较max是否小于当前a(列,行)
      是则交换二数,记下当前行,列
   next
   比较max是否小于min
   是则交换二数,记下当前行,列
next
输出

板凳

楼主看一下我用C编的一个程序:
#include<stdio.h>
#define  N  4
#define  M  5
void main()
{
   int i,j,a[N][M],max,maxj,flag;
   printf("please input matrix:\n");
   for(i=0;i<N;i++)
     for(j=0;j<M;j++)
       scanf("%d",&a[i][j]);
   for(i=0;i<N;i++)
    {
     max=a[i][0];
     maxj=0;
     for(j=0;j<M;j++)
     if(a[i][j]>max)
       {
        max=a[i][j];
        maxj=j;
        }
     flag=1;
     for(k=0;k<n;k++)
      if(max>a[k][maxj])
       {
        flag=0;
        continue;
        }
     if(flag)
       {
        printf("a[%d][%d]=%d\n",i,maxj,max);
        break;
        }
     }
   if(!flag)
     printf(It is not exist!\n");
}   
   看看咋样? 

3 楼

呵呵,没想好,应该是这样的:
第一步
先取行最大者,保存它的位置
再取列最小者,保存它的位置
第二步
比较它们是否是在同行同列(即同个数)
是则输出

4 楼

CLS
INPUT M, N
DIM A(M, N)
FOR I = 1 TO M: FOR J = 1 TO N
INPUT A(I, J)
NEXT J, I
CLS
FOR I = 1 TO M: FOR J = 1 TO N
PRINT USING "###"; A(I, J);
NEXT J: PRINT : NEXT I
FOR I = 1 TO M
MIN = A(I, 1): W = 1
FOR J = 1 TO N
IF A(I, J) <= MIN THEN MIN = A(I, J): W = J
NEXT J: F = 0
FOR K = 1 TO M
IF A(K, W) > MIN THEN F = 1: GOTO 10
NEXT K
IF F = 0 THEN PRINT "I="; I; "J="; W; "鞍点是:"; MIN
10 NEXT I: END
感谢我吧!


[em12][em12][em19][em19][em20]

5 楼

CLS
INPUT M, N
DIM A(M, N)
FOR I = 1 TO M: FOR J = 1 TO N
INPUT A(I, J)
NEXT J, I
CLS
FOR I = 1 TO M: FOR J = 1 TO N
PRINT USING "###"; A(I, J);
NEXT J: PRINT : NEXT I
FOR I = 1 TO M
MIN = A(I, 1): W = 1
FOR J = 1 TO N
IF A(I, J) <= MIN THEN MIN = A(I, J): W = J
NEXT J: F = 0
FOR K = 1 TO M
IF A(K, W) > MIN THEN F = 1: GOTO 10
NEXT K
IF F = 0 THEN PRINT "I="; I; "J="; W; "鞍点是:"; MIN
10 NEXT I
END

我来回复

您尚未登录,请登录后再回复。点此登录或注册