Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 21.01.2019
Сообщений: 42
1

Рекурсивная функция нахождения суммы элементов, расположенных между наибольшим и наименьшим элементами массива

18.07.2019, 13:45. Показов 1466. Ответов 1

Author24 — интернет-сервис помощи студентам
Дан двумерный массив (матрица 5 на 5)
Определить величину Y, как сумму элементов первой строки матрицы, расположенных между наибольшим и наименьшим элементом.
Я вначале сделал без использования рекурсии, а потом попробовал переделать это решение, но получилось не красиво. Тренировался на одномерном массиве.
В программе не должно быть глобальных переменных.

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
int fmin(int a[],int k,int pmin,int min)
{
    if (k < 5)
    {
        if (a[k] < min) 
        {
            min = a[k];
            pmin = k;
        }
        k++;
        return fmin(a, k, pmin, min);
    }
    return pmin;
}
int fmax(int a[],int k,int pmax,int max)
{
    if (k < 5)
    {
        if (a[k] > max)
        {
            max = a[k];
            pmax = k;
        }
        k++;
        return fmax(a, k, pmax, max);
    }
    return pmax;
}
int fsum(int a[])
{
    int pmin = fmin(a, 0, 0, a[0]);
    int pmax = fmax(a, 0, 0, a[0]);
    int y = 0;
    if (pmin < pmax)
    {
        for (int k = pmin + 1; k < pmax; k++)
        {
            y = y + a[k];
        }
    }
    else
        for (int k = pmax + 1; k < pmin; k++)
        {
            y = y + a[k];
        }
    return y;
}
 
int main()
{
    setlocale(LC_ALL, "");
    int a[5] = {-2,-9,-1,-2,8};
 
    cout << fsum(a) << endl;

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
int pmax = 0, pmin = 0, y = 0;
int     max = a[0], min = a[0];
    for (int k = 0;k < 5;++k)
    {
        if (a[k] > max) { max = a[k]; pmax = k; }
        if (a[k] < min) { min = a[k]; pmin = k; }
    }
 
    if (pmin < pmax)
    {
        for (int k = pmin + 1; k < pmax; k++)
        {
            y = y + a[k];
        }
    }
    else
        for (int k = pmax + 1; k < pmin; k++)
        {
            y = y + a[k];
        }
    cout << endl;
    cout << "Наибольший эл. 1 строки: " << max << endl;
    cout << "Наименьший эл. 1 строки: " << min << endl;
    cout << "Сумма элементов между min и max элементами: " << y << endl;
Добавлено через 1 час 1 минуту
Помогите с более каноничным решением
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.07.2019, 13:45
Ответы с готовыми решениями:

Найти сумму элементов массива, расположенных между наименьшим и наибольшим по величине элементами
Программа работает некорректно! в чем причина? Найти сумму элементов в A(n), расположенных...

Подсчитать количество четных элементов массива, расположенных между наибольшим и наименьшим элементами массива
Помогите мне решить эти 4 задачки по Паскалю,а то не получается у меня её решить(( 2)Дан...

Подсчитать в нем количество четных элементов, расположенных между наибольшим и наименьшим элементами массива.
Дан одномерный числовой массив, все элементы которого различны.Подсчитать в нем количество четных...

Найти среднее арифметическое значение элементов, расположенных между наибольшим и наименьшим элементами
Дан одномерный массив А, состоящий из N различных элементов, N - заданное натуральное число. Найти...

1
Заблокирован
18.07.2019, 18:10 2
Лучший ответ Сообщение было отмечено Sasha5289 как решение

Решение

а кто определит степень каноничности? , ну раз кругом рекурсия нужна
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
int* fmin(int *a,int n,int *p)
{
    if(--n==4) p=a+n;
    else 
        if(*p>a[n]) p=a+n;
    if(n) return fmin(a,n,p);
    return p;
}
int* fmax(int *a,int n,int *p)
{
    if(--n==4) p=a+n;
    else 
        if(*p<a[n]) p=a+n;
    if(n) return fmax(a,n,p);
    return p;
}
int fsum(int *a,int *min,int *max,int sum)
{
    if(!min)
    {
        min=fmin(a,5,0);
        max=fmax(a,5,0);
    }
    sum+=*min;
    if(min==max) return sum;
    return fsum(a,min+(min<max?1:-1),max,sum);
 
}
void main(int argc,char **argv)
{
    int a[5][5];
    for(int i=0; i<5; i++,cout<<endl)
        for(int j=0; j<5; j++)
        {
            a[i][j]=rand()%21-10;
            cout<<setw(4)<<a[i][j];
        }
    for(int i=0; i<5; i++)
        cout<<*fmin(a[i],5,0)<<" "<<*fmax(a[i],5,0)<<"  "<<fsum(a[i],0,0,0)<<endl;
1
18.07.2019, 18:10
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.07.2019, 18:10
Помогаю со студенческими работами здесь

Подсчитать сумму элементов между наибольшим и наименьшим элементами одномерного массива
Помогите решать &quot;Подсчитать сумму элементов между наибольшим и наименьшим элементами одномерного...

Найти сумму чисел, расположенных между наибольшим и наименьшим элементами
Дана последовательность из 10 чисел. Найти сумму чисел, расположенных между наибольшим и наименьшим...

Массивы. Найти разницу между наибольшим и наименьшим элементами массива
Задан одноименный массив из N чисел. Найти разницу, между наибольшим и наименьшим элементами...

Найти разность между наибольшим и наименьшим элементами заданного массива
Дан целочисленный массив размера N. Найти разность между наибольшим и наименьшим элементами массива.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru