读书人

救急该如何处理

发布时间: 2012-05-20 16:03:12 作者: rapoo

救急啊!!!
小弟碰到一题曰:
找出一个二维数组的鞍点,即该位置的元素在该行上最大该列上最小,此数即为鞍点,也可能一个二维数组没有鞍点。
小弟的考虑是先把这个数组每一行中最大的数找出来记录下它的行下标和列下标依次存入一个3*3的数组b中,再把这个数组每一列的最大数找出来同样记录下行下标和列下标依次存入另一个3*3的数组c中。然后将b数组中的数的行下标与列下标和c数组中的比较,如果两个下标一致则在这个位置上的数就是一个鞍点。下面是小弟写的程序和在TC2.0上编译运行的结果,很是让我郁闷。各位大神帮帮忙吧。
#include<stdio.h>
#define maxn 3
int main()
{
long a[maxn][maxn];
long b[3][3],c[3][3];
long max,min;
int i,j,k,a1,b1;
a1=0;
b1=0;
for (i=0;i<maxn;i++)
{
for(j=0;j<maxn;j++)
{
printf ("please enter a number:\n");
scanf("%ld",a[i][j]);
}
}
max=a[0][0];
min=a[0][0];
for (i=0;i<maxn;i++)
{
for (j=0;j<maxn;j++)
{
max=a[i][0];
if (a[i][j]>max)
max=a[i][j];
a1=i;
b1=j;
b[i][0]=max;
b[i][1]=i;
b[i][2]=j;
}
}
for (i=0;i<maxn;i++)
{
for (j=0;j<maxn;j++)
{
min=a[0][i];
if (a[j][i]<min)
min=a[j][i];
a1=j;
b1=i;
c[i][0]=min;
c[i][1]=j;
c[i][2]=i;
}
}
for (i=0;i<maxn;i++)
{
for (j=1;j<3;j++)
{
for (k=0;k<maxn;k++)
if (b[i][j]==c[k][j])
printf("%ld is suit for request\n",b[i][0]);
}
}
return 0;
}
小弟输入的数组a[3][3]={{3,2,1},{4,5,6},{5,6,7}}
鞍点应该是3的可是输出的却是:
-1226178765 is suit for request
-128546553 is suit for request
-128546553 is suit for request
-128546553 is suit for request
-128546553 is suit for request
-128546553 is suit for request



[解决办法]
写个大概:

C/C++ code
for(int i = 0; i < maxn;++i){    for(int j = 0; j <maxn; ++j)     {         ////求是否是行中最大            for(int k = 0; k < maxn; ++k)               {                 if(a[i][j]<a[i][k])                  break;                }            if(k<maxn)            continue;          /// 求是否是列中最小            for(int k = 0; k < maxn; ++k)              {                 if(a[i][j]> a[k][j])                    break;               }         if(k<maxn)          continue;        ///输出符合要求的         printf("%d\n", a[i][j]);    }} 

读书人网 >C语言

热点推荐