求:找出一个二维数组的"鞍点"的C语言程序,加急!!!!!!

鞍点:就是行上最大,列上最小,找出这个数的C语言程序,谢谢!!!!!!!!!!

第1个回答  2010-04-28
//这样就差不多没有问题了,一楼的不能排出在行中有相同最大值的情况,如:
///1 1 1
///2 3 4
///5 6 7
#include <stdio.h>
#define N 3 //N---多少行//
#define M 3 //M---多少列//
void main()
{
int a[N][M],i,j,t,k,max,min,n=0,seam[M],l;
printf("请输入数组:\n");
for (i=0;i<N;i++)
for (j=0;j<M;j++)
scanf("%d",&a[i][j]);////输入数组元素;
for (i=0;i<N;i++)///一行一行地找,
{ l=0;
max=a[i][0];k=0;
for (j=1;j<M;j++)//
if (a[i][j]>max)//
{max=a[i][j];k=j;}//找第i行的最大值,并记录下其值和下标,
for(j=0;j<M;j++)
if(a[i][j]==max)
seam[l++]=j;//找出相同的数,并将下标记录在seam数组中,
for(j=0;j<l;j++)
{
min=a[0][seam[j]];////
for (t=1;t<N;t++)////在上面的行最大值的对应列去找最小值,
if (a[t][seam[j]]<min)////
min=a[t][seam[j]];////
if (max==min)///////如果最大的等于小的,证明是同一个数
{printf("所要的数在数组中的%d行%d列\n",i+1,seam[j]+1);n++;}
}
}
if(n==0)
printf("there is no such numbers.\n");
}
第2个回答  2010-04-28
#include<stdio.h>
#define m 3
#define n 3
int find(int R[m][n])
{
int i,j,flag,rmax,k,c;
i=0;flag=0;
while((i<m)&&(! flag))
{
rmax<R[i][0];c=0;
for(j=1;j<n;j++)
if(rmax<R[i][j])
{
rmax=R[i][j];c=j;
}
flag=1;k=0;
while(k<m&&flag)
{
if(k!=i)
if(R[k][c]<=rmax)
flag=0;k++;
}
if(flag)
printf("鞍点是R[%d][%d]:%d\n",i,c,R[i][c]);
i=i+1;

}
if(!flag)
printf("没有鞍点!\n");

}
main()
{
int K[m][n],i,j;
printf("请输入%d个整数:\n",m*n);
for(i=0;i<m;i++)
for(j=0;j<n;j++)
scanf("%d",&K[i][j]);
find(K);
}本回答被提问者采纳