Все элементы max и их размещение массива - PullRequest
1 голос
/ 25 марта 2020

Так, например, у меня есть массив: [1, 4, 9, 3, 9]

Мне нужно найти все элементы max [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;

мне нужны позы всех максимальных элементов, но этот отпечаток только последний

Ответы [ 2 ]

0 голосов
/ 25 марта 2020

Я тупой, это простое решение:

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

}

0 голосов
/ 25 марта 2020

В любом случае вам нужен контейнер, в котором будут храниться индексы элементов с максимальным значением.

Вы можете динамически распределять память для такого контейнера.

Вот демонстрационная программа .

#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, то это означает, что была память ошибка размещения. Вы можете проверить такую ​​ситуацию.

...