Как я могу найти максимальное количество каждых 5 элементов массива в C

#c

#c

Вопрос:

Итак, мне нужно написать программу, которая принимает (путем ввода пользователем) целочисленный массив из 100 элементов и находит максимум из каждых 5 элементов и записывает их в новый массив, а остальные числа добавляет в другой массив.

Итак, примером может быть:
исходный массив (array1): 1,23,6,7,16,19,24,56,99,43 …

итак, он возьмет первые 5 элементов: 1,23,6,7,16 и найдет максимальное значение (23) и добавит его в новый массив
, затем следующие 5: 19,24,56,99,43 найдут их максимальное значение (99) и добавят его в другой массив и так далее, пока не достигнет последнего числа.

второй массив (array2): 23,99
третий массив (array3): 1,6,7,16,19,24,56,43

Я перепробовал все, но я могу получить только либо максимальное число во ВСЕМ массиве, либо максимальное количество ПЕРВЫХ 5 элементов.

Вот как должна выглядеть моя программа:

 #include <stdio.h>
#include <stdlib.h>
int array1[100];
int array2[100];
int size;

int main() {
            printf("Enter the size of the array: ");
            scanf("%d", amp;size);
            if (size > 100) {
                return 0;
            }
            printf("nEnter %d numbers: n", size);
            for (int i = 0; i < size; i  ) {
                scanf("%d", amp;array1[i]);
            }
            printf("nEntered array: ");
            for (int i = 0; i < size; i  ) {
                printf("%d, ", array1[i]);
            }
            printf("n");

// the code for the max numbers should be here

            printf("The max values of every 5 elements are: n");
            for(int i = 0; i < size2; i  ) {
            printf("%d, ", array2[i]);
            }
}
 

«size2» — это размер нового массива.

Комментарии:

1. Для начала напишите код, который, начиная с индекса s, находит максимум элементов, проиндексированных от s до s 4. Затем выясните, как использовать этот код для решения остальной части проблемы.

2. ну, @EricPostpischil я попробовал несколько вариантов решения, которое вы предлагаете, но все они приводят либо к сбою, либо к неисполняемым программам, поскольку «остальная часть проблемы» — это именно то, что я не могу решить

3. решить * не решатель

Ответ №1:

 #include <stdio.h>
#include <stdlib.h>
int array1[100];
int array2[100];
int array3[100];
int size, size2, size3;

int main() {
    printf("Enter the size of the array: ");
    scanf("%d", amp;size);
    if (size > 100) {
        return 0;
    }
    printf("nEnter %d numbers: n", size);
    for (int i = 0; i < size; i  ) {
        scanf("%d", amp;array1[i]);
    }
    printf("nEntered array: ");
    for (int i = 0; i < size; i  ) {
        printf("%d", array1[i]);
        if(i%5==4) printf("| ");
        else printf(", ");
    }
    printf("n");

// the code for the max numbers should be here

    size2=0; size3=0;
    int maxvalue_index=0;
    for(int i = 1; i < size; i  ) {
      if(array1[i]>array1[maxvalue_index]) maxvalue_index=i;
      if(i%5==4 || i==size-1){
        array2[size2]=array1[maxvalue_index];
        size2  ;
        for(int j=i-(i%5); j<=i ; j  ){
          if(array1[j]==array1[maxvalue_index]) continue;
          array3[size3]=array1[j];
          size3  ;
        }
        maxvalue_index=i 1;
      }
    }
    printf("The max values of every 5 elements are: n");
    for(int i=0;i<size2;i  ) printf("%d ",array2[i]);
    printf("nArray3n");
    for(int i=0;i<size3;i  ) printf("%d ",array3[i]);
    printf("n");
} 

Попробуйте это, это будет работать для длин, отличных от 5 * n, Дайте мне знать, если есть какая-либо ошибка 🙂

Комментарии:

1. Это работает именно так, как мне нужно, большое вам спасибо, добрый человек.

Ответ №2:

Приведенная ниже функция находит максимальное количество элементов в массиве от start до end эксклюзивного.

 int findmax(int *const arr, const size_t len, const size_t begin, size_t end) {
        int res = arr[begin];
        end = (len < end) ? len : end;

        for (int i = begin 1; i < end; i  ) {
                if (arr[i] > res)
                        res = arr[i];
        }

        return res;
}
 

Определите эту функцию перед вашей main , затем вызовите ее для каждых пяти элементов; максимум первых пяти элементов равен findmax(array1, size1, 0, 5) , для следующих
пяти это будет findmax(array1, size1, 5, 10) и так далее и тому подобное. Создание цикла for, который автоматизирует процесс, не должно занимать много усилий.

Комментарии:

1. я попробую это, но я использую VisualStudio, и в нем говорится, что «end» должно быть изменяемым значением

2. удалить const .