Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.12.2016, 11:34   #11
dima2308
Пользователь
 
Регистрация: 03.10.2014
Сообщений: 29
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Код:
for r:=1 to s do
k:=k+abs(i-x[r])+abs(j-y[r]);
Расстояние хитро считаешь. Во-первых расстояние это корень квадратный из суммы квадратов. И i и j это не координаты, а индексы координат. Корень при этом не обязательно извлекать, достаточно найти минимум среднего квадратов расстояний. Да и k не помешает int64 сделать
В условии ведь задано, что расстояние равно |x1-x2|+|y1-y2|, поэтому так и делаю
dima2308 вне форума Ответить с цитированием
Старый 17.12.2016, 11:45   #12
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Дурацкое условие. Но все равно i и j это не координаты, сравни с условием
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 17.12.2016, 13:56   #13
dima2308
Пользователь
 
Регистрация: 03.10.2014
Сообщений: 29
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Дурацкое условие. Но все равно i и j это не координаты, сравни с условием
Это понятно, координаты хранятся в массивах X и Y, но только не соображу, как правильно их использовать.
dima2308 вне форума Ответить с цитированием
Старый 17.12.2016, 14:03   #14
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

до x[r] и y[r] догадался, а до x[i] и y[i] слабо?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 17.12.2016, 14:41   #15
dima2308
Пользователь
 
Регистрация: 03.10.2014
Сообщений: 29
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
до x[r] и y[r] догадался, а до x[i] и y[i] слабо?
Так уже пробовал, но результата нужного не достигается...
Вот код, к которому пришел в результате, что не так?
Код:
var x,y:array[1..1000] of longint;
n,m,i,j,s,r:longint;
rez:double;
k:int64;
x1,y1:integer;
begin
rez:=100000000;
readln(s);
for i:=1 to s do
read(x[i],y[i]);
for i:=1 to m do
for j:=1 to n do
begin
k:=0;
for r:=1 to s do
k:=k+abs(x[i]-x[r])+abs(y[i]-y[r]);
if k/s<rez then 
begin
rez:=k/s;
x1:=x[i];
y1:=y[j];
end;
end;
write('X: ',x1,' Y: ',y1);
end.
dima2308 вне форума Ответить с цитированием
Старый 17.12.2016, 15:32   #16
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Код:
var x,y: array[1..100] of Integer;
    n,i,j,k,t,MaxX,MaxY,CityX,CityY: Integer;
    r,s: Longint;
begin
  readln(n);
  MaxX:=0; MaxY:=0;
  for i:=1 to n do begin
    read(x[i],y[i]);
    if x[i]>MaxX then MaxX:=x[i];
    if y[i]>MaxY then MaxY:=y[i];
  end;
  r:=100000;
  for i:=0 to MaxX do
    for j:=0 to MaxY do begin
      s:=0;
      for k:=1 to n do begin
        t:=Abs(i-x[k])+Abs(j-y[k]);
        if t=0 then begin s:=-1; Break; end;
        Inc(s,t);
      end;
      if (s>-1) and (s<r) then begin r:=s; CityX:=i; CityY:=j; end;
    end;
  writeln(CityX,CityY);
end;
Еще бы проверить, что нет свободных координат. Можно еще и минимальные значения входящик координат найти, тогда циклы не с 0 начинать, а с них
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 17.12.2016 в 15:46.
Аватар вне форума Ответить с цитированием
Старый 17.12.2016, 19:24   #17
dima2308
Пользователь
 
Регистрация: 03.10.2014
Сообщений: 29
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Код:
var x,y: array[1..100] of Integer;
    n,i,j,k,t,MaxX,MaxY,CityX,CityY: Integer;
    r,s: Longint;
begin
  readln(n);
  MaxX:=0; MaxY:=0;
  for i:=1 to n do begin
    read(x[i],y[i]);
    if x[i]>MaxX then MaxX:=x[i];
    if y[i]>MaxY then MaxY:=y[i];
  end;
  r:=100000;
  for i:=0 to MaxX do
    for j:=0 to MaxY do begin
      s:=0;
      for k:=1 to n do begin
        t:=Abs(i-x[k])+Abs(j-y[k]);
        if t=0 then begin s:=-1; Break; end;
        Inc(s,t);
      end;
      if (s>-1) and (s<r) then begin r:=s; CityX:=i; CityY:=j; end;
    end;
  writeln(CityX,CityY);
end;
Еще бы проверить, что нет свободных координат. Можно еще и минимальные значения входящик координат найти, тогда циклы не с 0 начинать, а с них
Блин, тут вообще несколько иной подход, надо проанализировать.
Сейчас потестил, в некоторых случаях считает правильно, но вот мой тест:
Код:
4
0 0
0 1
1 0
1 1
не проходит, выдает 0 0 (но там нельзя, уже город стоит); на выходе должно 0 2 быть.
Чего не хватает ему?
dima2308 вне форума Ответить с цитированием
Старый 17.12.2016, 19:27   #18
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Это тот случай когда места нет в координатах от 0 до максимальных. Циклы сделать до MaxX+1 и MaxY+1
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 17.12.2016, 21:58   #19
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,304
По умолчанию

Цитата:
Дурацкое условие.
Цитата:
Это понятно,...
Не совсем так. Королевство поделено на квадраты. Это шахматное королевство и расстояние измеряется в ходах ладьи.
Так что все нормально.


Как-то так, ...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 17.12.2016, 22:03   #20
dima2308
Пользователь
 
Регистрация: 03.10.2014
Сообщений: 29
По умолчанию

Что ж, выражаю всем, кто помог, огромную благодарность!!!
Побольше бы таких хороших людей)
dima2308 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Еще про определение месяца запуска Доктор Microsoft Office Excel 2 20.10.2011 10:41
[Turbo Pascal] - задачи про подбрасывание монеты и про определение истины. Sent Tools Помощь студентам 10 28.10.2010 18:11
Создать файл с названиями мировых столиц. Вывести на экран столицы на букву А... ЛиК@ Помощь студентам 1 29.09.2009 10:10