Массив: Произвести между матрицами обмен числами так, чтобы max первой матрицы не превышало min второй - QBasic
Формулировка задачи:
Условие
Даны две квадратные матрицы А() и В() размером 5×5
Он заполнены случайными числами
Требуется произвести между матрицами обмен числами
так, чтобы максимальное число первой матрицы не превышало
минимального числа второй матрицы.
Решение
Вариант 1
Можно ввести еще один линейный массив и сбросить на него все
элементы обоих матриц. Отсортировать этот массив и просто
поделить его элементы между двумя матрицами.
Примечание
Не подходит из-за сортировки. Сортировки нет в условии.
Вариант 2
Надо найти средний элемент. То есть такой, где число элементов
больших данного было бы равно числу элементов меньших данного
Вопрос.
Но как найти такой элемент?
Вариант 3
Тотальное сравнение элементов обоих матриц и обмен этими элементами
Вопрос.
Сколько должно быть сравнений? Где гарантия, что задача будет решена?
Задача пока не решена.
Ищется подходящий алгоритм
Кто может что-нибудь подсказать?
Решение задачи: «Массив: Произвести между матрицами обмен числами так, чтобы max первой матрицы не превышало min второй»
textual
Листинг программы
DECLARE SUB RAND () DECLARE SUB minn (x!(), min!, im!, jm!) DECLARE SUB maxx (x!(), max!, im!, jm!) CLS RAND DIM SHARED n n = 5 DIM A(n, n) DIM B(n, n) FOR i = 1 TO n FOR j = 1 TO n A(i, j) = FIX(40 * RND) - 20 LOCATE i, 5 * j - 2 PRINT A(i, j); NEXT j, i FOR i = 1 TO n FOR j = 1 TO n B(i, j) = FIX(40 * RND) - 20 LOCATE i, 5 * j + 30 PRINT B(i, j); NEXT j, i PRINT : PRINT FOR k = 1 TO n * n CALL maxx(A(), max, i1, j1) CALL minn(B(), min, i2, j2) SWAP A(i1, j1), B(i2, j2) NEXT FOR i = 1 TO n FOR j = 1 TO n LOCATE i + 6, 5 * j - 2 PRINT A(i, j); NEXT j, i FOR i = 1 TO n FOR j = 1 TO n LOCATE i + 6, 5 * j + 30 PRINT B(i, j); NEXT j, i END SUB maxx (x(), max, im, jm) max = x(1, 1) im = 1 jm = 1 FOR i = 1 TO n FOR j = 1 TO n IF max < x(i, j) THEN max = x(i, j) im = i jm = j END IF NEXT j, i END SUB SUB minn (x(), min, im, jm) mix = x(1, 1) im = 1 jm = 1 FOR i = 1 TO n FOR j = 1 TO n IF mix > x(i, j) THEN mix = x(i, j) im = i jm = j END IF NEXT j, i END SUB SUB RAND RANDOMIZE TIMER END SUB
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д