【问题标题】:All max elements and their postition of array所有最大元素及其数组位置
【发布时间】:2020-07-06 01:05:11
【问题描述】:

例如,我有数组:[1, 4, 9, 3, 9]

我需要找到所有最大元素 [9, 9] 及其索引 [2, 4]

我该怎么做? C语言中

int i, pom, max;
max=*gradovi;
for(i=0;i<n;i++) {
  if(*(gradovi+i)>max) {
    max=*(gradovi+i);
    pom=i;
  }
  if(*(gradovi+i)==max) {
    pom=i;
  }
}
return pom;

我需要所有最大元素的位置,但是这个打印只是最后一个

【问题讨论】:

  • 到目前为止你的努力是什么?您在寻找免费的家庭作业服务吗?
  • 我需要所有最大元素的位置,但是这个打印只是最后一个 int i, pom, max;最大=*格拉多维; for(i=0;imax){ max=*(gradovi+i); pom=我; } if(*(gradovi+i)==max){ pom=i; } } 返回 pom;
  • 还不算太多。问题是什么?这段代码有什么问题。
  • 这是一个函数吗?你寄什么给它?

标签: c arrays max function-definition


【解决方案1】:

在任何情况下,您都需要一个容器来存储具有最大值的元素的索引。

您可以为这样的容器动态分配内存。

这是一个演示程序。

#include <stdio.h>
#include <stdlib.h>

size_t max_elements( const int a[], size_t n, size_t **result )
{
    *result = NULL;
    size_t count = 0;

    if ( n != 0 )
    {
        size_t max_i = 0;
        count = 1;

        for ( size_t i = 1; i < n; i++ )
        {
            if ( a[max_i] < a[i] )
            {
                max_i = i;
                count = 1;
            }
            else if ( !( a[i] < a[max_i] ) )
            {
                ++count;
            }
        }

        *result = malloc( count * sizeof( size_t ) );

        if ( *result != NULL )
        {
            for ( size_t i = max_i, j = 0; i < n && j < count; i++ )
            {
                if ( !( a[i] < a[max_i ] ) ) ( *result )[j++] = i;
            }               
        }           
    }

    return count;
}

int main(void) 
{
    int a[] = { 1, 4, 9, 3, 9 };
    const size_t N = sizeof( a ) / sizeof( *a );

    size_t *result = NULL;

    size_t count = max_elements( a, N, &result );

    for ( size_t i = 0; i < count; i++ )
    {
        printf( "%zu: %d, ", result[i], a[result[i]] );
    }

    putchar( '\n' );

    free( result );

    return 0;
}

它的输出是

2: 9, 4: 9,

如果函数的返回值不等于 0,但指针结果设置为 NULL,则表示内存分配错误。你可以检查一下这种情况。

【讨论】:

    【解决方案2】:

    我很笨,解决方法很简单:

    void maks(int *gradovi, int n){ 
    int i, pom, max; 
    max=*gradovi; 
    for(i=1;i<n;i++){
        if(*(gradovi+i)>max){
            max=*(gradovi+i);
        }
        if(*(gradovi+i)==max){
            pom=i;
            printf("Najvise zarazenih je u gradu sa indeksom: %d\n", pom);
        }
    }  
    

    }

    【讨论】:

    • 这是错误的做法。最大值可以在循环内更改,但循环输出先前最大值的索引,该索引将小于当前最大值。并且该函数不存储索引。
    猜你喜欢
    • 2023-03-26
    • 1970-01-01
    • 2021-11-17
    • 2016-01-18
    • 2019-12-28
    • 2012-03-22
    • 1970-01-01
    • 2016-02-24
    相关资源
    最近更新 更多