Алгоритм на Delphi

программирование программы математика Delphi делфи

Есть строка определенной длины. Нужно записать ее в виде матрицы наименьшей площадью. ТО есть чтобы оставалось как можно меньше пустых клеток. К примеру: s:='КАКДЕЛА'; length(s)=7; => рациональней будет использовать прямоугольник 4х2 нежели 3х3. Как это реализовать на Delphi?
Ответы:
Элементарно!
Код на С (len -- длина строки):
for (int i=1, opt=1, mod=len; i<=sqrt(len); i++)
{
  int diff = (int)ceil((double)len/i) - len;
  if ( diff > mod )  { opt=i; mod=diff; }
}
Условия задачи не полные:
1) понятие матрицы не ограничено минимальной размерностью - рациональным всегда будет ответ: матрица length(s) x 1;
2) ответ может быть не один: 4 x 2 и 2 x 4 в указанном случае равносильно рациональны( в случае с длинной 12 есть 4 ответа не учитывая пункт 1.);
3) если достаточно одного "правильного" ответа, то для чётнтых можно отвечать (length(s) / 2) x 2, для нечетных ((length(s)+1)/2) x 2
4) если нужно максимально приближенную к квадратной матрице - можно так:
var
 l: integer;
 i, j, m: integer;
//...
 l := length(s);
 i := round(sqrt(l));
 j := i;
 m := i * j - l;
 while (j > 1) do
 begin
   if m > 0 then
     dec(j)
   else if m < 0 then
     inc(i)
   else
     break;
   m := i * j - l;
 end;
 if j = 1 then
   inc(j);
//тут i и j содержат ответ, например для 48 будет 8 и 6 соотв.


12 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.