Поиск суммы элементов массива, расположенных после минимального элемента - C (СИ)
Формулировка задачи:
В общем ошибка такая: работает через раз, пропускает максимальный и вместо этого берет последнее отрицательное число и делает его минимумом
Помогите исправить ошибку
#include <stdio.h>
#include <malloc.h>
#include <conio.h>
#include <locale.h>
#include <stdlib.h>
#include <time.h>
int linpoisk(int mass[], int N);
#define BORDER_HIGH 100
#define BORDER_LOW -100
int main()
{
setlocale(LC_ALL, "RUS");
int N;
int G = 0;
int* mass;
int i;
printf("Введите кол-во эл-тов массива: ");
scanf_s("%d", &N);
mass = (int *)malloc(N * sizeof(int));
srand((unsigned)(time(NULL)));
printf("Заполните массив элементами:\n");
for (i = 0; i < N; i++)
{
mass[i] = rand() % (BORDER_HIGH - BORDER_LOW + 1) + BORDER_LOW;
printf("a[%d] = %d\n", i , mass[i]);
}
printf("Сумма равна : %d \n", linpoisk(mass, N));
free(mass); // освобождение памяти
system("pause");
}
int linpoisk(int mass[], int N)
{
int i_find ;
int min;
int sum = 0;
i_find = 0;
min = mass[0];
for (int i = 0; i < N; i++)
{
if ( min > mass[i])
i_find = i;
}
printf("min : %d \n", i_find);
for (int i = i_find; i < N; i++)
{
sum += mass[i];
}
return sum;
}Решение задачи: «Поиск суммы элементов массива, расположенных после минимального элемента»
textual
Листинг программы
i_find = 0;
for (int i = 1; i < N; i++)
{
if ( mass[i_find] > mass[i])
i_find = i;
}
Объяснение кода листинга программы
- В переменной
i_findхранится индекс минимального элемента массиваmass. - Цикл
forначинается с i = 1 и продолжается до i < N. - На каждой итерации цикла выполняется проверка: если значение элемента с индексом
i_findбольше значения текущего элемента массива, тоi_findприсваивается значение текущей итерации. - После завершения цикла, в переменной
i_findбудет храниться индекс минимального элемента массиваmass. - Для получения суммы элементов, расположенных после минимального элемента, можно использовать следующий код: int sum = 0; for (int i = i_find + 1; i < N; i++) { sum += mass[i]; }