Вводится матрица a(m,n) из 0 и 1. Найти в ней прямоугольную подматрицу из одних единиц максимального размера +3 задачи - Turbo Pascal

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

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

  1. Вводится матрица a(m,n) из 0 и 1. Найти в ней прямоугольную подматрицу из одних единиц максимального размера (т.е. с максимальным произведением высоты на длину).
  2. N серых и M белых мышей сидят по кругу. Кошка ходит по кругу по часовой стрелке и съедает каждую S -тую мышку. В первый раз счет начинается с серой мышки. Составить алгоритм определяющий по- рядок в котором сидели мышки, если через некоторое время осталось K серых и L белых мышей.
  3. Ввести три числа а,b,с. 1). Представить a в виде суммы минимального числа целых слагаемых x[i], каждое из которых лежит на отрезке [b,c]. 2). Можно ли представить число а таким образом, чтобы k а = х[1] * x[2] * ... * x[k] = П x[i], i>=1, i=1 где b<=x[i]<=c, х[i], а, в, с - целые. Лучшим считается алгоритм находящий такое представление с наименьшим числом множителей. Предусмотреть вариант, когда такого представления не существует. Ввести три числа а,b,с. 1). Представить a в виде суммы минимального числа целых слагаемых x[i], каждое из которых лежит на отрезке [b,c]. 2). Можно ли представить число а таким образом, чтобы k а = х[1] * x[2] * ... * x[k] = П x[i], i>=1, i=1 где b<=x[i]<=c, х[i], а, в, с - целые. Лучшим считается алгоритм находящий такое представление с наименьшим числом множителей. Предусмотреть вариант, когда такого представления не существует.
  4. На олимпиаду прибыло N человек. Некоторые из них знакомы меж- ду собой.Можно ли опосредованно перезнакомить их всех между собой? (Незнакомые люди могут познакомиться только через общего знакомо- го)..
Надеюсь на помощь...
Был бы рад хотя бы за одну решенную задачу...
Могу предложить рублей 50 за задачу))
Есть предлжения?
Ну???

Решение задачи: «Вводится матрица a(m,n) из 0 и 1. Найти в ней прямоугольную подматрицу из одних единиц максимального размера +3 задачи»

textual
Листинг программы
uses crt;
type man = record
  acq: integer; //значения у людей
  friends: set of byte;  //список знакомств каждого
  flag: boolean; //отметка уже познакомившихся
 end;
 
var a: array [1..100] of man;
    i,j,k,n: integer;
begin
 write('Количество человек: ');
 readln(n);
 for i:=1 to n do //присваиваем людям числа
  begin
   write('A[',i,']= ');
   readln(a[i].acq);
   if a[i].acq>=n then
    begin
     writeln('Всех перезнакомить нельзя');
     halt;
    end;
  end;
 for i:=1 to n do //начинаем перебор
  begin
   k:=0;
   if a[i].acq=0 then //если человеку нужно выполнить 0 знакомств
    begin
     a[i].flag:=true; // свою миссию он выполнил, помечаем
     continue;
    end; //иначе
   for j:=1 to a[i].acq+k do // для i-го человека заводим знакомства, равные его числу
    if j=i then
     inc(k)
    else
    if not (j in a[i].friends) then // j-го человеку еще нет в списке знакомств i-го человека
     begin
      dec(a[j].acq); //у j-го человека отмечаем тоже состоявшееся знакомство 
      include(a[i].friends,j); //добавляем j-го человека в список друзей i-ому
     end;
   if a[i].acq=0 then //если человеку осталось выполнить 0 знакомств
    a[i].flag:=true; //свою миссию он выполнил, помечаем
  end;
 k:=0;
  for i:=1 to n do //сравниваем количество знакомств между всеми людьми
   for j:=1 to n do
    if a[i].friends=a[j].friends then
     inc(k);
   if k=n then
    writeln('Всех перезнакомить возможно')
   else
    writeln('Всех перезнакомить нельзя');
end.

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

  1. Вводится матрица a(m,n) из 0 и 1.
  2. Создается тип man, который представляет запись с тремя полями: acq (целое число), friends (множество байтов) и flag (логическое значение).
  3. Создается переменная a, которая представляет матрицу из 100 записей типа man.
  4. Считывается количество людей n.
  5. Для каждого человека i от 1 до n выполняется следующая последовательность действий:
    • Выводится сообщение A[,i,']=` и считывается значение a[i].acq.
    • Если a[i].acq>=n, выводится сообщение Всех перезнакомить нельзя и прерывается выполнение программы.
    • Иначе, начинается цикл перебора j от 1 до a[i].acq+k.
      • Если j=i, увеличивается значение k.
      • Если не j в a[i].friends, выполняется следующая последовательность действий:
      • Выводится сообщение A[,i,']=` и считывается значение a[i].acq.
      • Если a[i].acq=0, помечается, что задача выполнена, и выполняется команда continue.
      • Иначе, уменьшается значение a[j].acq и добавляется j в a[i].friends.
      • Если a[i].acq=0, помечается, что задача выполнена, и выполняется команда continue.
  6. Сравнивается количество знакомств между всеми людьми.
  7. Выводится сообщение Всех перезнакомить возможно или Всех перезнакомить нельзя.

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


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

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

13   голосов , оценка 4 из 5
Похожие ответы