【问题标题】:C - Finding the index of the largest item in 2D array [closed]C - 查找二维数组中最大项目的索引[关闭]
【发布时间】:2016-03-11 19:54:27
【问题描述】:
       #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;
       }

所以到目前为止,我有这段代码,它写了屏幕上的每一个元素,但我也想写最高的数字和它的索引。我只是一个初学者,所以想问问你的意见。

【问题讨论】:

  • 你尝试了什么?你的代码除了打印什么都不做。

标签: c arrays algorithm multidimensional-array


【解决方案1】:

很高兴为一个问题付出努力(和代码)。好工作。您需要做的就是比较每个数组值并将最大值保存为max。请注意,无论何时搜索 maximum 值,在这种情况下,最好将 max 值初始化为该存储类型 ('int') 的 minimum。因此,初始化为INT_MIN 可确保任何值(如果您的所有值都是负数,即使是大的负值)都将大于初始值。要捕获最大值出现的索引,只需在每次保存max 值时保存ij 的索引值,您将捕获最大值出现的索引:

#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

【讨论】:

  • 我也想写出最高数及其索引
  • 没问题等我更新:)
【解决方案2】:

在 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;
  }

【讨论】:

    【解决方案3】:

    您可以使用以下代码:

    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;
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2015-10-11
      • 2017-05-22
      • 2014-03-05
      • 2016-04-17
      • 2021-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多