1 | |
Массив: Произвести между матрицами обмен числами так, чтобы max первой матрицы не превышало min второй09.08.2016, 09:15. Показов 987. Ответов 4
Метки нет (Все метки)
Условие
Даны две квадратные матрицы А() и В() размером 5×5 Он заполнены случайными числами Требуется произвести между матрицами обмен числами так, чтобы максимальное число первой матрицы не превышало минимального числа второй матрицы. Решение Вариант 1 Можно ввести еще один линейный массив и сбросить на него все элементы обоих матриц. Отсортировать этот массив и просто поделить его элементы между двумя матрицами. Примечание Не подходит из-за сортировки. Сортировки нет в условии. Вариант 2 Надо найти средний элемент. То есть такой, где число элементов больших данного было бы равно числу элементов меньших данного Вопрос. Но как найти такой элемент? Вариант 3 Тотальное сравнение элементов обоих матриц и обмен этими элементами Вопрос. Сколько должно быть сравнений? Где гарантия, что задача будет решена? Задача пока не решена. Ищется подходящий алгоритм Кто может что-нибудь подсказать?
0
|
09.08.2016, 09:15 | |
Ответы с готовыми решениями:
4
Массив: Получить новую матрицу следующим способом: умножением Min каждой строки первой матрицы на Max соответствующего столбца второй Найти max и min элементы массива y и сформировать массив z из элементов массива y, находящихся между max и min y. Записать массив z в обратном порядке Упорядочить массив по убыванию элементов второй строки и напечатать max и min элементы матрицы Найти max элемент в первой половине массива и min во второй |
09.08.2016, 16:03 | 2 | |||||
Сообщение было отмечено echs как решение
Решение
Алгоритм по 3му варианту:
Находим максимальное число в первой матрице, находим минимальное число во второй матрице, запоминаем их индексы. Если max1 >min2, то меняем числа. Повторять до тех пор, пока max1>min2 Т.к. матрицы небольшого размера, то и сравнений будет немного. Максимально возможное кол-во сравнений 5*5*2*25 = 1250 По второму варианту: Находим медиану двух массивов, в зависимости от чисел используем сортировку или если используются целые числа вспомогательный массив. Далее используем медиану для обмена между массивами. Сложность может возникнуть с ситуацией, когда несколько чисел равны медиане, то нужно правильно составить алгоритм разделения чисел между матрицами. Если используется пузырьковая сортировка для поиска медианы, то это уже 50*49/2 = 1225 итераций, плюс доп. алгоритм по обмену числами. Если используются целые числа (например от 1 до 100), то количество итераций при поиске медианы может быть существенно меньше. Скорее всего, задачу нужно решить так, чтобы было как можно меньше обменов чисел между матрицами, поэтому вариант 1 не подходит. Самый простой вариант - 3й, через поиск мин и макс элементы матриц. Добавлено через 8 минут пример (писал на vba, но должен работать в QBasic) Вывод массивов сделайте самостоятельно
0
|
09.08.2016, 17:26 [ТС] | 3 | |||||
m-ch
Вы правы. Ваше предложение самое наилучшее Назовем его Вариант 4. Ибо в третьем варианте я планировал просто обмен значениями без поиска минимальных и максимальных значений. Отсюда и возникала неопределенность. Добавлено через 1 час 8 минут Вариант программы, решающей эту задачу
0
|
10.08.2016, 07:21 | 4 |
Сообщение было отмечено echs как решение
Решение
geh, чем не устроил мой код?
в Вашем коде в строке 27 цикл по обмену выполняется 25 раз Но возможно и не нужно столько раз выполнять обмены, это может привести к ситуации, когда будет произведен не нужный обмен и максимальный элемент первой матрицы будет больше минимального элемента второй матрицы. Проверка Вашего кода показывает, что может получится не правильная работа макроса. Просто протестируйте, первую матрицу заполните единицами, вторую двойками и посмотрите результат. Другие вопросы: Зачем randomize выводить в отдельную процедуру? Почему массивы начинаются с нулевого элемента, а не с первого? Почему используете вещественные переменные, а не целые?
1
|
10.08.2016, 07:47 [ТС] | 5 |
m-ch
У Вас классный код! Много лучше моего! Но. 1. Я предпочитаю вводить в программу процедуры. Мне так больше нравится. Процедура RAND - это конечно перегиб. 2. Теперь серьезно Вы указали на мою большую ошибку. При обмене элементами я не поставил условие проверки, надеясь на то, что максимум будет больше минимума. А этого, КАК ВЫ ВЕРНО ПОДМЕТИЛИ, может и не быть! 3. Вещественные числа? Ну это для программы особой роли не играет 4. Определение матрицы с нуля? Я это просмотрел. А потом матрицы маленькие. Тут на них не сэкономишь. Но вы все-равно правы. Я Вам очень благодарен за Ваш интерес к этой теме. Спасибо!
0
|
10.08.2016, 07:47 | |
10.08.2016, 07:47 | |
Помогаю со студенческими работами здесь
5
Массив заполнить случайными числами и вывести max и min. Выводится только max Найти разницу между min и max числами Переписать простые числа из матрицы A в массив B, из массива удалить числа между max и min элементами Найти max и min, если min левее max, то среднее арифметическое между ними Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |