3 / 3 / 2
Регистрация: 18.05.2014
Сообщений: 203
1

Найти максимальное произведение элементов массива, отстоящих друг от друга на расстоянии больше или равном 8

20.02.2015, 14:46. Показов 2719. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задача егэ с4 ,нужно решить с минимальной сложность ,задача такова:

у нас дан массив , длинной больше 8 , нужно найти произведение максимальное произведение элементов , отстоящих друг от друга на расстоянии больше или равно 8;

вот мое решение:
C++
1
2
3
4
5
int max=-pow(10,9);
for(i=8;i<N;i++)
for(j=0;j<=i-8;j++)
if(a[i]*a[j]>max)
max=a[i]*a[j];
Это решение сложностью Сумма арифметической прогрессии с первым членом 8 и до N-8+1; или где то N^2...

Как я понял нужно уже на считывании обрабатывать всё, такое решение оценивается в 2 балла из 4, есть более рациональное...
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.02.2015, 14:46
Ответы с готовыми решениями:

Нарисовать 10 разноцветных вертикальных линий отстоящих друг от друга на равном расстоянии
Нарисовать 10 разноцветных вертикальных линий отстоящих друг от друга на равном расстоянии, причем...

Нарисовать 10 разноцветных вертикальных линий отстоящих друг от друга на равном расстоянии
Нарисовать 10 разноцветных вертикальных линий отстоящих друг от друга на равном расстоянии, причем...

Сортировка вставками последовательности элементов, отстоящих друг от друга
Можете подробно обьяснить программу??? void shellSort(int a, int size); int increment(int inc,...

Расположить изображения на равном удалении друг от друга
Здравствуйте, уважаемые коллеги. Столкнулся с проблемой, решение для которой что-то не смог найти,...

1
Просто Лис
Эксперт Python
5322 / 3336 / 1021
Регистрация: 17.05.2012
Сообщений: 9,768
Записей в блоге: 9
26.02.2015, 15:58 2
Хм... Любопытная задачка)
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
int max1=a[0], max2=a[8], i1=0, i2=8;
for (int i=1;i<N-8;i++){
  if (a[i]>max1){
    max1 = a[i];
    i1 = i;
  }
}
for (int i=9;i<N;i++){
  if (a[i]>max2){
    max2 = a[i];
    i2 = i;
  }
}
int max=-1;
if ((i2-i1)>=8){//повезло
  max = a[i1]*a[i2];
} else {//не повезло
  for(i=8;i<N;i++){
    for(j=0;j<=i-8;j++){
      if(a[i]*a[j]>max){
        max=a[i]*a[j];
      }
    }
  }
}
Так сходу и не придумаешь как эту задачу решить проще.
Сейчас сложность получилась примерно
* в лучшем случае: 2*N
* в худшем случае: N^2 + 2*N

Добавлено через 1 минуту
Не воспринимайте мой код всерьёз, он ужасен...
0
26.02.2015, 15:58
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.02.2015, 15:58
Помогаю со студенческими работами здесь

Выяснить, какие из заданных точек находятся на минимальном расстоянии друг от друга и найти это расстояние
Четыре точки заданы своими координатами Х (х1,х2,х3), Y (y1,y2,y3), Z(z1,z2,z3), T (t1,t2,t3)....

Выяснить, какие из точек находятся на минимальном расстоянии друг от друга и найти значение этого расстояния
Четыре точки заданы своими координатами X(x1, x2, x3), Y(y1, y2, y3), Z(z1, z2, z3), T(t1,t2, t3)....

Вычислить значения функции на отрезке в заданном числе N равномерно отстоящих друг от друга точек
Помогите пожалуйста

Вычислить значения функции на отрезке в заданном числе равномерно отстоящих друг от друга точек
Вычислить значения функции на отрезке в заданном числе равномерно отстоящих друг от друга точек /...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru