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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.12.2016, 18:19   #1
dima2308
Пользователь
 
Регистрация: 03.10.2014
Сообщений: 29
По умолчанию Задача про определение столицы.

Была выдана задача (условие ниже на изображении):
Разбирали с преподавателем нескольку иную задачу:
Входные данные:
В первой строке входного потока два числа, разделенных пробелом - размеры царства (целые числа M - число столбцов и N - число строк в интервале от 1 до 50, на которые размечено королевство)
Во второй строке - количество существующих городов S (0 < S <= 100)
В следующих S строках, записано по два числа - X, Y, разделенных пробелом - координаты существующих городов.
Выходные данные:
Минимальное среднее расстояние от новой столицы до всех остальных городов с точностью до трех знаков после запятой.
Код:
var x,y:array[1..1000] of longint;
n,m,i,j,k,s,r:longint;
rez:real;
begin
rez:=100000;
readln(m,n);
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(i-x[r])+abs(j-y[r]);
if k/s<rez then rez:=r/s;
end;
writeln(rez);
end.
Но как переделать в данную мне не понимаю.
Буду рад любой помощи.
Изображения
Тип файла: jpg Безымянный.jpg (53.9 Кб, 118 просмотров)

Последний раз редактировалось dima2308; 14.12.2016 в 18:49.
dima2308 вне форума Ответить с цитированием
Старый 14.12.2016, 18:23   #2
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Где примеры входных/выходных данных?
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 14.12.2016, 18:41   #3
dima2308
Пользователь
 
Регистрация: 03.10.2014
Сообщений: 29
По умолчанию

Цитата:
Сообщение от Aleksandr H. Посмотреть сообщение
Где примеры входных/выходных данных?
Объяснили так:
на вход подаем
4
0 0
1 1
0 1
1 0
на выходе имеем 0 2
dima2308 вне форума Ответить с цитированием
Старый 15.12.2016, 19:10   #4
Dekay
Пользователь
 
Регистрация: 21.06.2016
Сообщений: 65
По умолчанию

Так и идешь. Только когда res < k/s - res = k/s; X := i, Y := j;

Выводишь X, Y
Dekay вне форума Ответить с цитированием
Старый 15.12.2016, 22:34   #5
dima2308
Пользователь
 
Регистрация: 03.10.2014
Сообщений: 29
По умолчанию

Цитата:
Сообщение от Dekay Посмотреть сообщение
Так и идешь. Только когда res < k/s - res = k/s; X := i, Y := j;

Выводишь X, Y
Не работает так, я пытался.
Не могу понять, как обойтись без использования m и n (поскольку на вход подается только количество городов и их координаты).

Последний раз редактировалось dima2308; 15.12.2016 в 22:43.
dima2308 вне форума Ответить с цитированием
Старый 15.12.2016, 22:41   #6
Dekay
Пользователь
 
Регистрация: 21.06.2016
Сообщений: 65
По умолчанию

Значит возьми по максимуму из исходных данных
Dekay вне форума Ответить с цитированием
Старый 16.12.2016, 08:21   #7
dima2308
Пользователь
 
Регистрация: 03.10.2014
Сообщений: 29
По умолчанию

Код:
var x,y:array[1..1000] of longint;
i,j,k,s,r:longint;
rez:real;
x1,y2:integer;
begin
rez:=100000;
readln(s);
for i:=1 to s do
read(x[i],y[i]);
for i:=1 to 1000 do
for j:=1 to 1000 do
begin
k:=0;
for r:=1 to s do
k:=k+abs(i-x[r])+abs(j-y[r]);
if k/s<rez then
begin
rez:=r/s;
x1:=i;
y1:=j;
end;
writeln(x1,y1);
end.
При любых входных данных на выходе 0 0.

Последний раз редактировалось dima2308; 16.12.2016 в 08:25.
dima2308 вне форума Ответить с цитированием
Старый 16.12.2016, 18:09   #8
Dekay
Пользователь
 
Регистрация: 21.06.2016
Сообщений: 65
По умолчанию

Rez сделай больше. Намного больше
Dekay вне форума Ответить с цитированием
Старый 17.12.2016, 10:15   #9
dima2308
Пользователь
 
Регистрация: 03.10.2014
Сообщений: 29
По умолчанию

Цитата:
Сообщение от Dekay Посмотреть сообщение
Rez сделай больше. Намного больше
Да уж чего только не пробовал...
Результат выдает, но неверный.
Изображения
Тип файла: jpg Безымянный.jpg (26.8 Кб, 110 просмотров)
dima2308 вне форума Ответить с цитированием
Старый 17.12.2016, 10:41   #10
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
for r:=1 to s do
k:=k+abs(i-x[r])+abs(j-y[r]);
Расстояние хитро считаешь. Во-первых расстояние это корень квадратный из суммы квадратов. И i и j это не координаты, а индексы координат. Корень при этом не обязательно извлекать, достаточно найти минимум среднего квадратов расстояний. Да и k не помешает int64 сделать
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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