Интересная Олимпиадная Задача - 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
- 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)
- Завершение подпрограммы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д