Страницы: 1
RSS
Выборка несколько подряд идущих чисел так, чтобы каждое следующее число было меньше предыдущего., поиск максимальной суммы
 
Какие оптимальные формулы использовать для решения следующей задачи (картинка с задачей и файл во вложении)?
 
Дмитрий Иванов, а тут формулами только?а в каком виде результат - покажите в файле или тут одно число?
Изменено: Mershik - 30.10.2020 19:34:19
Не бойтесь совершенства. Вам его не достичь.
 
не обязательно формулами, можно разными способами. Главное добиться правильного ответа и понять саму логику решения) для дальнейших задач)
 
Дмитрий Иванов, сколько должно получится? 1070,7 ?
Не бойтесь совершенства. Вам его не достичь.
 
Доброе время суток.
Цитата
Дмитрий Иванов написал:
можно разными способами
Power Query ;)
 
Спасибо! Ответ правильный! А можно кратко суть сортировок описать? логику решения
 
Цитата
Дмитрий Иванов написал:
суть сортировок описать
Не могу. В решение сортировка не используется. Алгоритм.
1. Первое число получает номер последовательности 1
2. Если последующее число меньше предыдущего, то номер последовательности не меняется. Если же нет, последующее число получает номер последовательности больше на 1.
3. Находим суммы чисел последовательностей
4. Находим первую последовательность с максимальной суммой.
5. Выводим найденную последовательность.
 
а если стоит офис 2003,2007,2010 и никто не слышал про надстройку Power Query, например, школьник 8-9 класса, возможен ли альтернативный способ решения?
 
del
Изменено: buchlotnik - 23.08.2021 17:59:27
Соблюдение правил форума не освобождает от модераторского произвола
 
B1 - =A1
B2- =Если(A2<A1;B1+A2;A2) или =(A2<A1)*B1+A2 протянуть до конца
C1 - =INT(MAX(B:B)) наверно это =ЦЕЛОЕ(МАКС(B:B))
По вопросам из тем форума, личку не читаю.
 
БМВ, просто супер, проще некуда! Спасибо!
 
Цитата
Дмитрий Иванов написал:
проще некуда
ну вы ж просили  для  
Цитата
Дмитрий Иванов написал:
например, школьник 8-9 класса
Хотя тезка чуть выше тоже самое предложил, ну может чуть перебдил с универсальностью для первой ячейки. но в остальном то тоже.
Изменено: БМВ - 30.10.2020 21:44:53
По вопросам из тем форума, личку не читаю.
 
Интересно, а что это VBA-шники молчат?
Код
Public Function getMaxDescendingSequenceSum(ByVal inRange As Range) As Double
    Dim maxSum As Double, curSum As Double, v As Double, vData, i As Long
    vData = inRange.Value
    v = vData(1, 1)
    curSum = v
    maxSum = -1E+308
    For i = 2 To UBound(vData, 1)
        If vData(i, 1) < v Then
            curSum = curSum + vData(i, 1)
        Else
            If maxSum < curSum Then maxSum = curSum
            curSum = vData(i, 1)
        End If
        v = vData(i, 1)
    Next
    If maxSum < curSum Then maxSum = curSum
    getMaxDescendingSequenceSum = Fix(maxSum)
End Function
 
Цитата
Андрей VG написал:
VBA-шники молчат
:D
Код
Public Function getMaxDescendingSequenceSum(ByVal inRange As Range) As Double
    Dim v, vData, i As Long
    vData = inRange.Value
    v = vData
    For i = 2 To UBound(vData, 1)
        If vData(i, 1) < vData(i - 1, 1) Then _
            v(i, 1) = v(i - 1, 1) + vData(i, 1)
    Next
    getMaxDescendingSequenceSum = Fix(Application.Max(v))
End Function
По вопросам из тем форума, личку не читаю.
 
БМВ, сравним? Уберём чтение диапазона, только массив.
Скрытый текст

Результат:
0,8984375
1,070313
0,953125
1,210938
1,007813
1,078125
0,9140625
1,140625
0,8984375
1,203125
Итого, короче - проигрыш по скорости 22%
А если не лениться с оптимизацией (исключить лишние преобразования и обращения по индексу).
Скрытый текст

то
0,4149933
1,363998
0,4150085
1,076004
0,4019928
1,048996
0,5270081
1,171997
0,4190063
1,123001
или 165% проигрыша :)
 
Дмитрий Иванов, неужели Вы настолько ленивы, что не можете нормально набрать текст сообщения?!
 
Цитата
Андрей VG написал:
или 165% проигрыша
щутка не зашла. Код то  - это просто VBлизация формульного варианта.  :D
По вопросам из тем форума, личку не читаю.
Страницы: 1
Наверх