Форум программистов, компьютерный форум, киберфорум
Pascal ABC
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.88/25: Рейтинг темы: голосов - 25, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 19.10.2013
Сообщений: 10
1

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

03.08.2015, 07:33. Показов 4926. Ответов 10
Метки нет (Все метки)

На вход подается последовательность целых чисел по модулю не больше 1000. Признак конца 2*109. Нужно узнать максимальное произведение двух чисел этой последовательности, расстояние между которыми не меньше 4(т.е. между ними стоят минимум 2 числа). Массивы не использовать.

Собственно вопрос, как определить это расстояние?(пожалуйста, обьясните на словах без кода)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.08.2015, 07:33
Ответы с готовыми решениями:

Найти самое большее чётное произведение среди чисел, расстояние между которыми меньше 5
Здравствуйте! Данная "программа" должна обрабатывать числа, расстояние между которыми меньше 5, а...

Найти наибольшую сумму двух чисел последовательности, между которыми интервал не менее заданного
На вход программе подаются целые числа, в первой строке задается их количество(не меньше семи),...

Найти номера двух точек, расстояние между которыми наибольшее
В общем начал изучать С#, это мой первый язык программирования, я застрял на этой теме. Если можно...

Найти номера двух точек, расстояние между которыми наибольшее
Даны координаты N точек на плоскости x(0), y(0) ,..., x(n), y(n) (N=20). Найти номера двух точек,...

10
4341 / 2109 / 2115
Регистрация: 10.12.2014
Сообщений: 8,127
07.08.2015, 07:34 2
Pascal
1
2
for i := 1 to count - 3 do
  for j := i + 3 to count do
0
4 / 4 / 10
Регистрация: 11.08.2015
Сообщений: 23
15.08.2015, 20:29 3
1) Находишь 4 максимальных числа из этого списка и запоминаешь их позиции (всё при считывании)
2) Находишь максимальное произведение между этими 4 числами, расстоянии между которыми не меньше 4
3) Выводишь искомое произведение
0
1 / 1 / 0
Регистрация: 22.06.2015
Сообщений: 15
16.08.2015, 00:43 4
Neutrino8, скорее всего нужно запоминать сами числа, а не позиции. Так как в задании сказано, что массивы использовать нельзя, а иначе какой смысл в позициях?
0
Модератор
63391 / 47080 / 32450
Регистрация: 18.05.2008
Сообщений: 114,118
16.08.2015, 06:17 5
Позиции тоже нужны, чтобы определить что расстояние между двумя числами не менее 4-х. Массивы для этого не нужны.
0
1 / 1 / 0
Регистрация: 22.06.2015
Сообщений: 15
16.08.2015, 14:13 6
да, точно, но для этого можно вставить один счетчик, который будет проверять это, после запоминания первого наибольшего числа
0
Модератор
63391 / 47080 / 32450
Регистрация: 18.05.2008
Сообщений: 114,118
16.08.2015, 14:17 7
Цитата Сообщение от Azavod Посмотреть сообщение
первого наибольшего числа
Так может это произведение не первого с каким-то, а например 3 и 4...
5 3 4 8 3 3 8-> 8*8
1
2508 / 1129 / 582
Регистрация: 07.06.2014
Сообщений: 3,281
16.08.2015, 19:35 8
Puporev, точняк!

плюс ещё засада есть.
в условии не зря про модуль упомянули - в последовательности могут быть отрицательные числа.
поэтому, если даны числа:
1 2 3 4 5 2 -20 5 7 8 то max произведение = 5 * 8 = 40
а если дана последовательность
1 -3 3 4 5 2 -20 5 7 8 то max произведение = -3 * -20 = 60

так что задачка не такая банальная, как может показаться..
0
4 / 4 / 10
Регистрация: 11.08.2015
Сообщений: 23
17.08.2015, 23:10 9
Это не сильно меняет задачу, нужно просто ещё 4 самых мин. отрицательные находить и проверять произведение (отриц. с отриц., а полож. с полож.)

Pascal
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
VAR
  pr,n,i,j: LongINt;
  
  a1,a2,a3,a4: LongInt; // Макс. положительные
  i1,i2,i3,i4: longINt;
  
  b1,b2,b3,b4: LongINt; // Мин. отрицательные
  j1,j2,j3,j4: LongINt;
  
  Procedure Swap(var a,b: LongInt);
  Var c: LongInt;
  Begin
    c := a;
    a := b; 
    b := c;
  End;
  
BEGIN
  While (True) do begin
    Read(n);
    Inc(i); 
    j := i;
    If (n = 2000000000) then Break;
    
    If (n > a4) then begin Swap(a4,n); Swap(i4,j); End;
    If (n > a3) then begin Swap(a3,n); Swap(i3,j); End;
    If (n > a2) then begin Swap(a2,n); Swap(i2,j); End;
    If (n > a1) then begin Swap(a1,n); Swap(i1,j); End;
    
    If (n < b4) then begin Swap(b4,n); Swap(j4,j); End;
    If (n < b3) then begin Swap(b3,n); Swap(j3,j); End;
    If (n < b2) then begin Swap(b2,n); Swap(j2,j); End;
    If (n < b1) then begin Swap(b1,n); Swap(j1,j); End;
  End;
 
  If (a1 * a2 > pr)and(i1 * i2 > 0)and(Abs(i1 - i2) > 2) then pr := a1 * a2;
  If (a1 * a3 > pr)and(i1 * i3 > 0)and(Abs(i1 - i3) > 2) then pr := a1 * a3;
  If (a1 * a4 > pr)and(i1 * i4 > 0)and(Abs(i1 - i4) > 2) then pr := a1 * a4;
  If (a2 * a3 > pr)and(i2 * i3 > 0)and(Abs(i2 - i3) > 2) then pr := a2 * a3;
  If (a2 * a4 > pr)and(i2 * i4 > 0)and(Abs(i2 - i4) > 2) then pr := a2 * a4;
  If (a3 * a4 > pr)and(i3 * i4 > 0)and(Abs(i3 - i4) > 2) then pr := a3 * a4;
 
  If (b1 * b2 > pr)and(j1 * j2 > 0)and(Abs(j1 - j2) > 2) then pr := b1 * b2;
  If (b1 * b3 > pr)and(j1 * j3 > 0)and(Abs(j1 - j3) > 2) then pr := b1 * b3;
  If (b1 * b4 > pr)and(j1 * j4 > 0)and(Abs(j1 - j4) > 2) then pr := b1 * b4;
  If (b2 * b3 > pr)and(j2 * j3 > 0)and(Abs(j2 - j3) > 2) then pr := b2 * b3;
  If (b2 * b4 > pr)and(j2 * j4 > 0)and(Abs(j2 - j4) > 2) then pr := b2 * b4;
  If (b3 * b4 > pr)and(j3 * j4 > 0)and(Abs(j3 - j4) > 2) then pr := b3 * b4;
  
  Writeln(pr);
END.
0
2508 / 1129 / 582
Регистрация: 07.06.2014
Сообщений: 3,281
18.08.2015, 08:44 10
Neutrino8, проверь на последовательности
1 -2 -3 -4
0
4 / 4 / 10
Регистрация: 11.08.2015
Сообщений: 23
18.08.2015, 13:48 11
Добавил 3 частных случая, теперь должно работать
Pascal
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
55
56
57
58
59
60
61
62
63
VAR
  pr,n,i,j: LongINt;
  n1,n4: LongInt;       // Первое и четвертое числа
  
  a0,b0,i0,j0: LongInt; // Мин. полож. и макс. отриц.
  
  a1,a2,a3,a4: LongInt; // Макс. положительные
  i1,i2,i3,i4: longINt;
  
  b1,b2,b3,b4: LongINt; // Мин. отрицательные
  j1,j2,j3,j4: LongINt;
  
  Procedure Swap(var a,b: LongInt);
  Var c: LongInt;
  Begin
    c := a;
    a := b; 
    b := c;
  End;
  
  Procedure Prov(a1,a2,a3,a4,i1,i2,i3,i4: LongInt);
  Begin
    If (a1 * a2 > pr)and(i1 * i2 > 0)and(Abs(i1 - i2) > 2) then pr := a1 * a2;
    If (a1 * a3 > pr)and(i1 * i3 > 0)and(Abs(i1 - i3) > 2) then pr := a1 * a3;
    If (a1 * a4 > pr)and(i1 * i4 > 0)and(Abs(i1 - i4) > 2) then pr := a1 * a4;
    If (a2 * a3 > pr)and(i2 * i3 > 0)and(Abs(i2 - i3) > 2) then pr := a2 * a3;
    If (a2 * a4 > pr)and(i2 * i4 > 0)and(Abs(i2 - i4) > 2) then pr := a2 * a4;
    If (a3 * a4 > pr)and(i3 * i4 > 0)and(Abs(i3 - i4) > 2) then pr := a3 * a4;
  End;
  
BEGIN
  a0 := 1000;
  b0 := -1000;  
  While (True) do begin
    Read(n);
    If (n = 2000000000) then Break;
    Inc(i); 
    j := i;
    
    if (i = 1) then n1 := n;
    if (i = 4) then n4 := n;
    If (n > 0)and(n < a0)then begin a0 := n; i0 := i; end;
    If (n < 0)and(n > b0)then begin b0 := n; j0 := i; end;
    
    If (n >= a4) then begin Swap(a4,n); Swap(i4,j); End;
    If (n >= a3) then begin Swap(a3,n); Swap(i3,j); End;
    If (n >= a2) then begin Swap(a2,n); Swap(i2,j); End;
    If (n >= a1) then begin Swap(a1,n); Swap(i1,j); End;
    
    If (n <= b4) then begin Swap(b4,n); Swap(j4,j); End;
    If (n <= b3) then begin Swap(b3,n); Swap(j3,j); End;
    If (n <= b2) then begin Swap(b2,n); Swap(j2,j); End;
    If (n <= b1) then begin Swap(b1,n); Swap(j1,j); End;
  End;
 
  pr := -9999999;
  Prov(a1,a2,a3,a4,i1,i2,i3,i4);
  Prov(b1,b2,b3,b4,j1,j2,j3,j4);
  If (i = 4) then pr := n1 * n4;
  If (a0 * b0 > pr)and(i0 * j0 > 0)and(Abs(i0 - j0) > 2) then pr := a0 * b0;
  
  Writeln(pr);
END.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.08.2015, 13:48

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Найти номера двух точек расстояние между которыми наибольшее
Дано координаты (x , y ) 20 точек на плоскости. Найти номера двух точек расстояние между которыми...

Найти номера двух точек, расстояние между которыми наибольшее
Даны координаты n точек на плоскости x1, y1 ,..., xn, yn. Найти номера двух точек, расстояние между...

Найти номера двух точек, расстояние между которыми наибольшее
Даны координаты N точек на плоскости x(0),y(0),...x(n),y(n) (N=20). Найти номера двух точек,...

Найти номера двух точек, расстояние между которыми наибольшее
Даны координаты N точек на плоскости x(0), y(0) ,..., x(n), y(n) (N=20). Найти номера двух точек,...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.