主题:[讨论]数组中求鞍点
qiujie1142
[专家分:0] 发布于 2007-03-25 00:46:00
[color=FF00FF][size=2]有一个M行N列数组,求它的鞍点(所谓鞍点就是这个数在行中是最大,而在列中是最小)找出并输出此数及其所在的行列号(一个数组中可能有一个鞍点,也有可能有多个鞍点)[/size][/color]
回复列表 (共5个回复)
沙发
QB71 [专家分:1300] 发布于 2007-03-25 03:12:00
设数组为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
输出
板凳
chwen822 [专家分:1540] 发布于 2007-03-25 10:00:00
楼主看一下我用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 楼
QB71 [专家分:1300] 发布于 2007-03-25 12:15:00
呵呵,没想好,应该是这样的:
第一步
先取行最大者,保存它的位置
再取列最小者,保存它的位置
第二步
比较它们是否是在同行同列(即同个数)
是则输出
4 楼
Lovely哆啦 [专家分:1360] 发布于 2007-03-26 11:16:00
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 楼
小精灵LS [专家分:580] 发布于 2007-04-01 16:54:00
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
我来回复