Массив: Произвести между матрицами обмен числами так, чтобы max первой матрицы не превышало min второй - QBasic
Формулировка задачи:
Условие
Даны две квадратные матрицы А() и В() размером 5×5
Он заполнены случайными числами
Требуется произвести между матрицами обмен числами
так, чтобы максимальное число первой матрицы не превышало
минимального числа второй матрицы.
Решение
Вариант 1
Можно ввести еще один линейный массив и сбросить на него все
элементы обоих матриц. Отсортировать этот массив и просто
поделить его элементы между двумя матрицами.
Примечание
Не подходит из-за сортировки. Сортировки нет в условии.
Вариант 2
Надо найти средний элемент. То есть такой, где число элементов
больших данного было бы равно числу элементов меньших данного
Вопрос.
Но как найти такой элемент?
Вариант 3
Тотальное сравнение элементов обоих матриц и обмен этими элементами
Вопрос.
Сколько должно быть сравнений? Где гарантия, что задача будет решена?
Задача пока не решена.
Ищется подходящий алгоритм
Кто может что-нибудь подсказать?
Код к задаче: «Массив: Произвести между матрицами обмен числами так, чтобы max первой матрицы не превышало min второй - QBasic»
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
10 голосов, оценка 3.500 из 5
СОХРАНИТЬ ССЫЛКУ