Интересная Олимпиадная Задача - QBasic
Формулировка задачи:
Удалить из одномерного массива наименьшее количество элементов так, что бы оставшиеся элементы возрастали
Решение задачи: «Интересная Олимпиадная Задача»
textual
Листинг программы
DECLARE SUB printArr () DECLARE FUNCTION check% () DATA 7, 1, 4, 5, 9, 6, 7, 8, 3, 2, 10 DIM SHARED n AS LONG n = 11 DIM SHARED aArr(1 TO n) AS LONG DIM SHARED bArr(1 TO n) AS INTEGER DIM a(1 TO n) AS LONG, i AS LONG, k AS LONG, p AS LONG, j AS LONG FOR i = 1 TO n: READ aArr(i): NEXT i CLS PRINT "Array:": CALL printArr PRINT "New array:" IF check = 1 THEN CALL printArr: END FOR k = 1 TO n - 1 REDIM a(1 TO k) AS LONG p = k FOR i = 1 TO k: a(i) = i: NEXT i DO j = j + 1 REDIM bArr(1 TO n) AS INTEGER FOR i = 1 TO k: bArr(a(i)) = 1: NEXT i IF check = 1 THEN CALL printArr PRINT "kol-vo combyn:"; j END END IF IF p = 0 THEN EXIT DO FOR i = k TO p STEP -1 a(i) = a(p) + i - p + 1 NEXT i IF a(k) = n THEN p = p - 1 ELSE p = k LOOP NEXT k FUNCTION check% DIM i AS LONG, maxArr AS LONG FOR i = 1 TO n IF bArr(i) = 0 THEN IF aArr(i) > maxArr THEN maxArr = aArr(i) ELSE EXIT FUNCTION END IF NEXT i check = 1 END FUNCTION SUB printArr DIM i AS LONG FOR i = 1 TO n IF bArr(i) = 0 THEN PRINT aArr(i); NEXT i PRINT END SUB
Объяснение кода листинга программы
- Объявление подпрограммы printArr и функции check%
- Задание начального значения переменной n равным 11
- Заполнение массива aArr значениями от 7 до 11 через шаг 2
- Заполнение массива bArr значениями от 1 до 10 через шаг 2
- Проверка значения переменной check% и вызов подпрограммы printArr при его равенстве 1
- В цикле от 1 до n-1 перебираются элементы массива aArr
- Внутри цикла создается массив a размером от 1 до k и заполняется значениями от 1 до k
- В цикле от 1 до k в массиве bArr устанавливаются значения 1 для элементов, соответствующих элементам массива a
- Проверяется значение переменной check% и при его равенстве 1 вызывается подпрограмма printArr
- Выводится сообщение
kol-vo combyn:
и значение переменной j - Если p равно 0, то выполняется выход из цикла
- Если p не равно 0, то выполняется перестановка элементов массива a
- Проверяется условие a(k) = n, если оно выполняется, то значение p уменьшается на 1, иначе значение p заменяется на k
- Завершение цикла
- Определение функции check%
- В цикле от 1 до n проверяется условие bArr(i) = 0
- Если условие выполняется, то проверяется условие aArr(i) > maxArr
- Если условие выполняется, то значение maxArr заменяется на aArr(i), иначе выполняется выход из функции
- Значение переменной check% устанавливается равным 1
- Завершение функции
- Определение подпрограммы printArr
- В цикле от 1 до n проверяется условие bArr(i) = 0
- Если условие выполняется, то выводится значение aArr(i)
- Завершение подпрограммы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д