|
Вопрос # 1 714/ вопрос открыт / |
|
Здравствуйте, эксперты!
Помогите пожалуйста решить следующую задачу:
Дана целочисленная прямоугольная матрица. Определить:
Максимальное из чисел, встречающихся в заданной матрице более одного раза.
(Матрица задается случайно или вводится с клавиатуры).
 |
Вопрос задал: Baimer (статус: Посетитель)
Вопрос отправлен: 22 июня 2008, 11:47
Состояние вопроса: открыт, ответов: 2.
|
Ответ #1. Отвечает эксперт: min@y™
Россия - чемпион!
Лови готовую программу:
program p1714;
{$APPTYPE CONSOLE}
uses
SysUtils;
const
Rows = 5; // Кол-во строк матрицы
Cols = 6; // Кол-во столбцов матрицы
Limit = 100; // 0..(Limit - 1) - интервал значений элементов матрицы
type
TMatrix = array[0..Rows - 1, 0..Cols - 1] of Integer; // Тип матрицы
TMeaning = array[0..Limit - 1] of Integer; // Количество встречающихся значений
var
i, j: Integer;
M: TMatrix;
Max: Integer; // Максимальный элемент
V: TMeaning; // Вектор встречающихся значений
begin
// Формирование случайной матрицы и вывод на экран,
// а также формирование количественного вектора
Randomize();
FillChar(V, SizeOf(V), 0);
for i:= 0 to Rows - 1 do
begin
for j:= 0 to Cols - 1 do
begin
M[i, j]:= Random(Limit);
Inc(V[M[i, j]]);
Write(' ', M[i, j]: 3);
end;
WriteLn;
end;
// Поиск максимального элемента, встречающегося больше 1 раза
Max:= -1;
for i:= 0 to Rows - 1 do
for j:= 0 to Cols - 1 do
if (M[i, j] > Max) and (V[M[i, j]] > 1)
then Max:= M[i, j];
// Вывод максимального элемента и количества раз его присутствия в матрице
if Max <> -1
then WriteLn(' Max = ', Max, ' (', V[Max], ' times).')
else WriteLn(' Not found.'); // Все элементы разные
Write(' Press Enter...');
ReadLn;
end.
 |
Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 22 июня 2008, 13:41
|
Ответ #2. Отвечает эксперт: Мережников Андрей
Здравствуйте, Baimer!
Ответ №1 довольно прост, но не совсем отвечает условиям задачи, во-первых матрица ЦЕЛОЧИСЛЕННЫХ, а не целочисленных положительных чисел. В случае присутствия отрицательных чисел, данный способ вызовет ошибку; во-вторых, как быть в том случае, если значения не ограничены сверху?
Решение поиска необходимо разбить на две части: 1) найти все повторяющиеся значения в матрице; 2)среди этих значений искать максимальное;
Приложение: Переключить в обычный режим-
- var Vector:array of integer;
- Matrix:array of array of integer;
- ....
- ....
- ....
- function
- var col1,col2,row1,row2,cnt:integer;
- ll:boolean;
- begin
- for col1:=0 to high(Matrix)-1
- do for row1:=0 to high(Matrix[0])-1
- do for col2:=col1+1 to high(Matrix)
- do for row2:=row1+1 to high(Matrix[0])
- do if Matrix[col1,row1]=Matrix[col2,row2]
- then begin
- ll:=false;
- for cnt:=0 to high(Vecotr)
- do if Vector[cnt]=Matrix[col1,row1]
- then begin
- ll:=true;
- break;
- end;
- if not(ll)
- then begin
- setlength(Vector,high(Vector)+2);
- Vector[high(Vector)]:=Matrix[col1,row1];
- end;
- end;
-
- end;
 |
Ответ отправил: Мережников Андрей (статус: Абитуриент)
Время отправки: 22 июня 2008, 21:54
Оценка за ответ: 5
|
Мини-форум вопроса
Всего сообщений: 2; последнее сообщение — 22 июня 2008, 21:58; участников в обсуждении: 2.
|
Baimer (статус: Посетитель), 22 июня 2008, 19:47 [#1]:
Спасибо за помощь, но мне нужно чтобы матрицу вводить можно было и с клавиатуры тоже.
|
|
Мережников Андрей (статус: Абитуриент), 22 июня 2008, 21:58 [#2]:
Для того, чтобы реализовать два способа заполнения матрицы, надо разбить на отдельные процедуры ввод элементов матрицы и поиск решения задачи по матрице. Способ ввода зависит от того, какое Вы реализуете приложение - консольное или с использованием VCL
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|