题目是“找出一个5行4列的二维数组的“鞍点”,即该位置的元素在该行上最小,在该列上最大。输出该元素的值和行列号,如没有鞍点,则输出“没有找到鞍点”。”
#include<iostream>
using namespace std;
int main()
{
int a[5][4],i,j;
void andian(int array[5][4]);
for(i=0;i<=4;i++)
for(j=0;j<=3;j++)
cin>>a[i][j];
andian(a);
return 0;
}
void andian(int array[5][4])
{
int i,j;
int min(int,int,int,int);
int max(int,int,int,int,int);
for(i=0;i<=4;i++)
for(j=0;j<=3;j++)
if(array[i][j]==min(array[i][0],array[i][1],array[i][2],array[i][3])&&array[i][j]==max(array[0][j],array[1][j],array[2][j],array[3][j],array[4][j]))
cout<<i<<" "<<j<<endl;
}
int min(int a,int b,int c,int d)
{
int y=0;
if(a<y)y=a;
if(b<y)y=b;
if(c<y)y=c;
if(d<y)y=d;
return(y);
}
int max(int a,int b,int c,int d,int e)
{
int x=0;
if(a>x)x=a;
if(b>x)x=b;
if(c>x)x=c;
if(d>x)x=d;
if(e>x)x=d;
return(x);
}
无论输入什么都没有输出结果。
#include<iostream>
using namespace std;
int main()
{
int a[5][4], i, j;
void andian(int array[5][4]);
for (i = 0; i <= 4; i++)
for (j = 0; j <= 3; j++)
cin >> a[i][j];
andian(a);
return 0;
}
void andian(int array[5][4])
{
int i, j;
int min(int, int, int, int);
int max(int, int, int, int, int);
for (i = 0; i <= 4; i++)
for (j = 0; j <= 3; j++)
if (array[i][j] == min(array[i][0], array[i][1], array[i][2], array[i][3]) && array[i][j] == max(array[0][j], array[1][j], array[2][j], array[3][j], array[4][j]))
cout << i << " " << j << endl;
}
int min(int a, int b, int c, int d)
{
int y = a;
if (a < y)y = a;
if (b < y)y = b;
if (c < y)y = c;
if (d < y)y = d;
return(y);
}
int max(int a, int b, int c, int d, int e)
{
int x = a;
if (a > x)x = a;
if (b > x)x = b;
if (c > x)x = c;
if (d > x)x = d;
if (e > x)x = d;
return(x);
}
int x=0;
if(a<x)x=a;
改为x=a;
先让x的值是第一个数,否则所有数都必须是自然数,没法判断负数。
-=-=-=
min函数的问题更大,你直接让y=0,那你输入的数据如果都大于0,无论你怎么计算,最小值都会是0,那当然没法相等。