Нерешенная задача на максимум - QBasic

Узнай цену своей работы

Формулировка задачи:

Суть задачи проста. Задан ряд натуральных чисел 1, 2, 3, ... , 100 Из этого ряда должна быть построена числовая сумма с использованием функции SIN() так, чтобы сумма получилась максимальной (или близкой к ней) пример построения 1) sin1 + sin2 + sin(3+4) + sin5 +sin(6+7) + ... 2) sin(1+2) + sin3 + sin(4+5) + sin(6+7) + ... Иными словами под знаком sin может стоять одно или сумма двух чисел (порядок четко соблюдается), но заранее не определено - одно число или сумма решение 1. подумал. может сначала проверить все пары и выделить те, которые дают наибольшие значения? 2. заодно рассмотреть пары, которые дают наименьшие значения и не использовать их? 3. разбить большой ряд на несколько меньших и провести тотальный расчет на максимум 4. задача мне не подвластна, может кто что-нибудь подскажет?

Решение задачи: «Нерешенная задача на максимум»

textual
Листинг программы
DIM m(100) AS DOUBLE, t(100) AS STRING, m1 AS DOUBLE, m2 AS DOUBLE, i AS LONG, n AS LONG
n = 100
m(1) = SIN(1)
t(1) = "sin(1)"
FOR i = 2 TO n
    m1 = m(i - 1) + SIN(i)
    m2 = m(i - 2) + SIN(i - 1 + i)
    IF m1 > m2 THEN
        m(i) = m1
        t(i) = t(i - 1) + "+sin(" + LTRIM$(STR$(i)) + ")"
    ELSE
        m(i) = m2
        t(i) = t(i - 2) + "+sin(" + LTRIM$(STR$(i - 1)) + "+" + LTRIM$(STR$(i)) + ")"
    END IF
NEXT i
PRINT m(n)
PRINT t(n)

Объяснение кода листинга программы

  1. Задаются размеры массивов m(100) и t(100) для хранения функций и их названий.
  2. Задается размер переменной i равный 100.
  3. Первая ячейка массива m(1) заполняется значением функции sin(1), а первая ячейка массива t(1) — её названием sin(1).
  4. Далее в цикле от 2 до 100 выполняются следующие действия: — m1 принимает значение суммы предыдущего элемента массива m и функции sin(i). — m2 принимает значение суммы предыдущего элемента массива m и функции sin(i-1+i). — Сравнивая m1 и m2, в массив m(i) записывается большее значение, а в массив t(i) — соответствующее название функции. — Если m1 больше m2, то в t(i) добавляется +sin( + LTRIM$(STR$(i)) + ). — Если m2 больше m1, то в t(i) добавляется +sin( + LTRIM$(STR$(i-1)) + + + LTRIM$(STR$(i)) + ).
  5. После цикла выводятся в экран последний элемент массива m(n) и соответствующее ему значение из массива t(n).

Оцени полезность:

15   голосов , оценка 4.2 из 5