题目:
找出一个二维数组的“鞍点”,即该位置上的元素在该行上最大,在该列上最小。也可能没有鞍点。
我写了两个程序,可是两个程序运行结果好像都不太好,请大家帮忙看一下,到底错在哪里,谢谢。
程序一:
#define ROW 3
#define COL 4
int main(void)
{
int arr[COL][ROW];
int i,j,k,l,temp,flag = 0;
for(i=0;i<COL;i++)
{
for(j=0;j<ROW;j++)
{
scanf(“%d”,&arr[i][j]); /* 输入数组 */
}
}
for(i=0;i<COL;i++)
{
for(j=0;j<ROW;j++)
{
k=i;
temp = arr[i][j];
for(l=0;l<ROW;l++)
{
if(temp > arr[k][l])
{
flag = 1;
}
}
k = j;
for (l=0;l<COL;l++)
{
if(temp < arr[l][k])
{
flag = 1;
}
}
if(flag == 0)
{
printf(“%d,%d= %d is ..\n”,i,j,arr[i][j]);
}
else
{
flag = 0;
}
}
}
getch();
return 0;
}
程序二:
int main(void)
{
int i,
int j;
int max;
int colum;
int m;
int flag0;
int flag1;
int a[3][4];
int b[3][4];
printf(“input the array a:\n”);
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
scanf(“%5d”,&a[i][j]);
}
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
printf(“%5d”,a[i][j]);
printf(“\n”);
}
flag0=0;
for(i=0;i<3;i++)
{
max=a[i][0];
for(j=0;j<4;j++)
if(a[i][j]>max)
{
max=a[i][j];
colum=j;
}
for(m=0;m<4;m++)
if(max>a[m][colum])
flag0=0;
if(flag0)
{
printf(“the %d row,%d colum %d is AnDian.\n”,i,colum,max);
flag1=1;
}
}
if(!flag1)
printf(“\n no AnDian!\n”);
getch();
return(0);
}
>> 本文固定链接: http://www.vcgood.com/archives/1686
分两步:
第一步,找出一行中的最大的一个;
第二步,找出改行中是否有其他一样大的数,并分别验证在改列中是否是最小的一个;
[code]
#include <stdio.h>
#define ROW 3
#define COL 4
int arr1[COL][ROW] = {
{ 1, 4, 2 },
{ 1, 5, 3 },
{ 1, 3, 2 },
{ 1, 6, 3 }
};
int arr2[COL][ROW] = {
{ 1, 2, 3 },
{ 1, 3, 2 },
{ 1, 4, 7 },
{ 1, 5, 3 }
};
int arr3[COL][ROW] = {
{ 1, 4, 4 },
{ 1, 5, 5 },
{ 1, 3, 3 },
{ 1, 6, 6 }
};
void foo( int arr[COL][ROW] )
{
int i, j, k;
int x, y;
int max;
int flag;
for ( i = 0; i < COL; i++ ) {
max = arr[i][0];
x = i;
for ( j = 0; j < ROW; j++ ) {
if ( max < arr[i][j] ) { //查找每行最大的一个元素
max = arr[i][j];
}
}
for ( j = 0; j < ROW; j++ ) {
if ( max == arr[x][j] ) { //该行最大的元素可能有好几个,分别验证是否改列的最小一个
y = j;
flag = 1;
for ( k = 0; k < COL; k++ ) {
if ( max > arr[k][y] ) { //如果不是则设置flag=0
flag = 0;
}
}
if ( flag == 1 ) { //不是最小的一个,不输出
printf( "arr[%d][%d] = %d\n", x, y, arr[x][y] );
}
}
}
}
}
int main(void)
{
printf( "arr1\n" );
foo( arr1 );
printf( "arr2\n" );
foo( arr2 );
printf( "arr3\n" );
foo( arr3 );
return 0;
}
[/code]
谢谢版主