在一个二维数组中找出符合以下条件的元素:此元素在所在行为最小,在所在列最大(也可能没有这样的元素)。
【输入形式】
3行数据,每行4个数,用空格分隔
【输出形式】
一个整数
【样例输入1】
11 22 13 14
35 26 47 48
13 16 66 12
【样例输出1】
26
【样例输入2】
1 22 3 4
5 66 7 8
9 8 11 12
【样例输出2】
Can not find!
#include
#include
#include
#include
using namespace std;
#define N 4
#define M 3
int findmax(int (*y)[N], int n);
void myFind(int (*p)[N]);
int findmin(int *x, int *getcol);
int main()
{
int a[M][N] = {1, 22, 3, 4, 5, 66, 7, 8, 9, 8, 11, 12}, i, j;
for (i = 0; i < M; i++)
{
for (j = 0; j < N; j++)
cin>>a[i][j];
}
myFind(a);
return 0;
}
void myFind(int (*p)[N])
{ int row,flag=0,min,max;
int *getcol=0;int b[N];int n=0;
for(;n<N;n++)
{max=findmax(p,n);
for(int y=0;y<M;y++)
if(p[y][n]==max)row=y;
for(int i=0;i<N;i++)
{b[i]=p[row][i];}
min=findmin(b,getcol);
if(*getcol==n&&min==max)
{cout<<min;flag=1;break;}}
if(!flag)cout<<"Can not find!";
}
int findmax(int (y)[N],int n)
{ int k,max;
max=(y[0]+n);
for(k=0;k<M;k++)
if(max<(y[k]+n))
max=*(y[k]+n);
return max; //返回二维数组第n列的最大值
}
int findmin(int *x,int *getcol)
{ int t,min;
min=*x; *getcol=0;
for(t=0;t<N;t++)
if(min>(x+t))
min=*(x+t),*getcol=t; //t表示最小值在一维数组中位置(下标)
return min;
}
其中myFind函数错了,但不知道错哪了?