Интересная Олимпиадная Задача - QBasic

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

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

Удалить из одномерного массива наименьшее количество элементов так, что бы оставшиеся элементы возрастали

Решение задачи: «Интересная Олимпиадная Задача»

textual
Листинг программы
  1. DECLARE SUB printArr ()
  2. DECLARE FUNCTION check% ()
  3. DATA 7, 1, 4, 5, 9, 6, 7, 8, 3, 2, 10
  4. DIM SHARED n AS LONG
  5. n = 11
  6. DIM SHARED aArr(1 TO n) AS LONG
  7. DIM SHARED bArr(1 TO n) AS INTEGER
  8.  
  9.  
  10. DIM a(1 TO n) AS LONG, i AS LONG, k AS LONG, p  AS LONG, j AS LONG
  11.  
  12. FOR i = 1 TO n: READ aArr(i): NEXT i
  13.    
  14. CLS
  15. PRINT "Array:": CALL printArr
  16. PRINT "New array:"
  17. IF check = 1 THEN CALL printArr: END
  18.  
  19. FOR k = 1 TO n - 1
  20.     REDIM a(1 TO k) AS LONG
  21.     p = k
  22.     FOR i = 1 TO k: a(i) = i: NEXT i
  23.     DO
  24.         j = j + 1
  25.         REDIM bArr(1 TO n) AS INTEGER
  26.         FOR i = 1 TO k: bArr(a(i)) = 1: NEXT i
  27.         IF check = 1 THEN
  28.         CALL printArr
  29.         PRINT "kol-vo combyn:"; j
  30.         END
  31.         END IF
  32.        
  33.         IF p = 0 THEN EXIT DO
  34.         FOR i = k TO p STEP -1
  35.         a(i) = a(p) + i - p + 1
  36.         NEXT i
  37.         IF a(k) = n THEN p = p - 1 ELSE p = k
  38.     LOOP
  39. NEXT k
  40.  
  41. FUNCTION check%
  42.     DIM i AS LONG, maxArr AS LONG
  43.     FOR i = 1 TO n
  44.     IF bArr(i) = 0 THEN
  45.         IF aArr(i) > maxArr THEN maxArr = aArr(i) ELSE EXIT FUNCTION
  46.     END IF
  47.     NEXT i
  48.     check = 1
  49. END FUNCTION
  50.  
  51. SUB printArr
  52.     DIM i AS LONG
  53.     FOR i = 1 TO n
  54.     IF bArr(i) = 0 THEN PRINT aArr(i);
  55.     NEXT i
  56.     PRINT
  57. END SUB

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

  1. Объявление подпрограммы printArr и функции check%
  2. Задание начального значения переменной n равным 11
  3. Заполнение массива aArr значениями от 7 до 11 через шаг 2
  4. Заполнение массива bArr значениями от 1 до 10 через шаг 2
  5. Проверка значения переменной check% и вызов подпрограммы printArr при его равенстве 1
  6. В цикле от 1 до n-1 перебираются элементы массива aArr
  7. Внутри цикла создается массив a размером от 1 до k и заполняется значениями от 1 до k
  8. В цикле от 1 до k в массиве bArr устанавливаются значения 1 для элементов, соответствующих элементам массива a
  9. Проверяется значение переменной check% и при его равенстве 1 вызывается подпрограмма printArr
  10. Выводится сообщение kol-vo combyn: и значение переменной j
  11. Если p равно 0, то выполняется выход из цикла
  12. Если p не равно 0, то выполняется перестановка элементов массива a
  13. Проверяется условие a(k) = n, если оно выполняется, то значение p уменьшается на 1, иначе значение p заменяется на k
  14. Завершение цикла
  15. Определение функции check%
  16. В цикле от 1 до n проверяется условие bArr(i) = 0
  17. Если условие выполняется, то проверяется условие aArr(i) > maxArr
  18. Если условие выполняется, то значение maxArr заменяется на aArr(i), иначе выполняется выход из функции
  19. Значение переменной check% устанавливается равным 1
  20. Завершение функции
  21. Определение подпрограммы printArr
  22. В цикле от 1 до n проверяется условие bArr(i) = 0
  23. Если условие выполняется, то выводится значение aArr(i)
  24. Завершение подпрограммы

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

7   голосов , оценка 3.571 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут