C - 查找2D数组中最大项的索引

时间:2015-12-07 08:59:26

标签: c arrays algorithm multidimensional-array

       #include <stdio.h>

       int main () {

           int a[5][2] = { {0,0}, {1,2}, {2,4}, {3,6},{4,8}};
           int i, j;

           for ( i = 0; i < 5; i++ ) {
               for ( j = 0; j < 2; j++ ) {
                   printf("a[%d][%d] = %d\n", i,j, a[i][j] );
               }
           }
           return 0;
       }

所以到目前为止我有这个代码,它会在屏幕上写下每一个元素,但我还想写出最高的数字及其索引。我只是一个初学者,所以我想问你的意见。

3 个答案:

答案 0 :(得分:2)

通过问题获得努力(和代码)是很好的。做得好。您需要做的就是比较每个数组值并将最大值保存为max。请注意,每当搜索最大值时,最好将max值初始化为此存储类型的最小值('int')案件。因此,初始化为INT_MIN可确保任何值(如果所有值均为负值,即使是大的负值)也将大于初始值。要捕获发生最大值的索引,只需在每次保存i值时保存jmax的索引值,并且您将捕获最大值出现的索引:

#include <stdio.h>
#include <limits.h>

int main () {

    int a[][2] = {{0,0}, {1,2}, {2,4}, {3,6},{4,8}};
    int maxrow = -1, maxcol = -1;
    int nrows = sizeof a/sizeof *a;
    int i, j, max = INT_MIN;

    for (i = 0; i < nrows; i++) {
        for (j = 0; j < 2; j++ ) {
            printf("a[%d][%d] = %d\n", i,j, a[i][j] );

            /* find largess value */
            if (a[i][j] > max) {
                max = a[i][j];
                maxrow = i;
                maxcol = j;
            }
        }
    }

    printf ("\n maximum value at 'a[%d][%d]' : %d\n\n", 
            maxrow, maxcol, max);

    return 0;
}

<强>编译

gcc -Wall -Wextra -O3 -o bin/array_max array_max.c

<强>输出

$ ./bin/array_max
a[0][0] = 0
a[0][1] = 0
a[1][0] = 1
a[1][1] = 2
a[2][0] = 2
a[2][1] = 4
a[3][0] = 3
a[3][1] = 6
a[4][0] = 4
a[4][1] = 8

 maximum value at 'a[4][1]' : 8

答案 1 :(得分:1)

在C函数中,没有参数的main应声明为

   int main ( void )

至于搜索最大元素,那么方法很简单。首先,假设最大元素是数组的第一个元素。然后将数组的所有其他元素与此最大值进行比较,如果某个元素大于最大值,则它将成为最大值。

例如

   #include <stdio.h>

   #define M 5
   #define N 2

   int main ( void ) 
   {
       int a[M][N] = 
       { 
           { 0, 0 }, { 1, 2 }, { 2, 4 }, { 3, 6 }, { 4, 8 } 
       };

       int i, j;
       int max_i, max_j;

       for ( i = 0; i < M; i++ ) 
       {
           for ( j = 0; j < N; j++ ) 
           {
               printf("a[%d][%d] = %d\n", i,j, a[i][j] );
           }
       }

       max_i = 0;
       max_j = 0;

       for ( i = 0; i < M; i++ ) 
       {
           for ( j = 0; j < N; j++ ) 
           {
               if ( a[max_i][max_j] < a[i][j] )
               {
                   max_i = i;
                   max_j = j;
               }  
           }
       }

       printf( "The maximum value is %d at row %d and column %d\n", 
               a[max_i][max_j], max_i, max_j );

       return 0;
  }

答案 2 :(得分:-1)

您可以使用以下代码:

int max,pi,pj;
max = –2147483648;
for(i=0; i<5; i++) {
    for(j=0; j<2; j++) {
        if(a[i][j] > max) {
            max = a[i][j];
            pi = i;
            pj = j;
        }
    }
}