Нерешенная задача на максимум - 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)
Объяснение кода листинга программы
- Задаются размеры массивов m(100) и t(100) для хранения функций и их названий.
- Задается размер переменной i равный 100.
- Первая ячейка массива m(1) заполняется значением функции sin(1), а первая ячейка массива t(1) — её названием
sin(1)
. - Далее в цикле от 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)) +)
. - После цикла выводятся в экран последний элемент массива m(n) и соответствующее ему значение из массива t(n).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д