#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
.