Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
-1 / 3 / 1
Регистрация: 20.04.2011
Сообщений: 412
1

Найти максимальный элемент в массиве (делением пополам)

25.03.2016, 09:40. Показов 1285. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет!
подскажите такой момент:
Найти максимальный элемент в массиве ai (i=1, , n), используя соотноше-ние (деления пополам) max(a1,, an) = max[max(a1,, an/2), max(an/2+1, , an)].

Делаю так:
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
//---------------------------------------------------------------------------
#include <stdlib.h>
#include <math.h>
#include <iostream.h>
#include <stdio.h>
#include <conio.h>
#include <vcl.h>
#pragma hdrstop
 
//---------------------------------------------------------------------------
 
#pragma argsused
            double _max;
 double maxr(double *a,int n);
int main(int argc, char* argv[])
        {
double a[10]={2,1,4,5,7,8,1,6,9,10};
double r=maxr(a,4);
printf("maximum=%Lf\n",r);
getch();
 
}
double maxr(double *a,int n)
      {
if(n==1)
return a[0];
if(n==2)
return max(a[0],a[1]);
double max1= maxr(a,n/2);
double max2=maxr(a+n/2,n/2);
return max(max1,max2);
}
получаю это:
Найти максимальный элемент в массиве (делением пополам)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.03.2016, 09:40
Ответы с готовыми решениями:

Найти максимальный элемент в массиве используя соотношение деления пополам
Найти максимальный элемент в массиве ai (i=1, ...., n), используя соотношение (деления пополам)...

Найти максимальный элемент в массиве используя метод деления пополам
Плиз хэлп ми!!!! В понедельник экзамен а я эту долбаную лабу всё ещё не сдал!!!! И Хз как её...

Найти максимальный элемент в массиве, используя метод деления пополам
П.5.4. Правил Запрещено создавать темы с бессмысленными названиями вроде &quot;Помогите!&quot;, &quot;Вопрос&quot; и...

Найти максимальный элемент в массиве используя соотношение деления пополам
Помогите ребята, что не так с кодом.Найти максимальный элемент в массиве ai (i=1, ...., n),...

4
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
25.03.2016, 11:57 2
C++
1
printf("maximum=%f\n",r); // выдает 5, как и ожидалось
0
20 / 20 / 8
Регистрация: 06.11.2013
Сообщений: 65
Записей в блоге: 1
25.03.2016, 14:48 3
Цитата Сообщение от correcеt Посмотреть сообщение
C++
1
2
3
4
5
6
7
 {
if(n==1) return a[0];
if(n==2) return max(a[0],a[1]);    // ИЗБЫТОЧНОЕ УСЛОВИЕ.
double max1= maxr(a,n/2);
double max2=maxr(a+n/2,n/2);    // ??? ОШИБКА.
return max(max1,max2);
}
Такая схема корректно работает только на размере массива с количеством элементов равным степени двойки.
Чуть более элегантное и корректное решение:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
double maxr(double *a,int n);
int main( int argc, char* argv[])
{
double a[] = {1,4,2,3,5,6,7,8,9,10};
double r = maxr( a, sizeof(a)/sizeof(double) );
 
// PRINT( r );
}
 
 
double max( double _a1, double _a2 ) { return (_a1 >_a2 ) ? _a1 :_a2; }
 
double maxr( double *a, int n )
{
return (n==1) ? a[0] : max( maxr(a,n/2), maxr( a+n/2,n/2+(n&1) ) );   // +(n&1) существенное замечание. 
}
1
-1 / 3 / 1
Регистрация: 20.04.2011
Сообщений: 412
28.03.2016, 09:13  [ТС] 4
k399et, что-то не очень понятно что выводит ваш элегантный пирмер,ибо при запуске у меня консоль закрывается,system("PAUSE"); не помогает
0
20 / 20 / 8
Регистрация: 06.11.2013
Сообщений: 65
Записей в блоге: 1
28.03.2016, 10:00 5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
double max( double _a1, double _a2 ) { return (_a1 >_a2 ) ? _a1 :_a2; }
 
int _tmain(int argc, _TCHAR* argv[])
{
double maxr(double *a,int n);
 
double a[] = {1,4,2,3,5,6,7,8,9,10};
double r = maxr( a, sizeof(a)/sizeof(double) );
 
    printf( "r = %f", r );
    getch();
}
 
double maxr( double *a, int n )
{
return (n==1) ? a[0] : max( maxr(a,n/2), maxr( a+n/2,n/2+(n&1) ) );   // +(n&1) существенное замечание.
}
Миниатюры
Найти максимальный элемент в массиве (делением пополам)  
1
28.03.2016, 10:00
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.03.2016, 10:00
Помогаю со студенческими работами здесь

Найти максимальный элемент в массиве используя соотношение деления пополам
Найти максимальный элемент в массиве ai (i=1, ...., n), используя соотношение (деления пополам)...

Найти максимальный элемент массива, используя метод деления пополам
Есть задача.Найти максимальный элемент массива используя метод деления пополам вида...

В целочисленном массиве M(n) найти максимальный элемент среди четных элементов массива и максимальный элемент
В целочисленном массиве M(n) найти максимальный элемент среди четных элементов массива и...

В массиве найти максимальный элемент в первой половине и максимальный элемент во второй
Доброго времени суток! НЕ могу написать код программы к задаче все не удачные попытки написания...


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

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