Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.61/18: Рейтинг темы: голосов - 18, средняя оценка - 4.61
3 / 3 / 2
Регистрация: 15.10.2014
Сообщений: 84

Выведите одно целое число — координату точки, в которой лучше всего построить школу

19.10.2014, 20:18. Показов 3516. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В деревне Интернетовка все дома расположены вдоль одной улицы по одну сторону от нее. По другую сторону от этой улицы пока ничего нет, но скоро все будет – школы, магазины, кинотеатры и т.д.
Для начала в этой деревне решили построить школу. Место для строительства школы решили выбрать так, чтобы суммарное расстояние, которое проезжают ученики от своих домов до школы, было минимально.
План деревни можно представить в виде прямой, в некоторых целочисленных точках которой находятся дома учеников. Школу также разрешается строить только в целочисленной точке этой прямой (в том числе разрешается строить школу в точке, где расположен один из домов – ведь школа будет расположена с другой стороны улицы).
Напишите программу, которая по известным координатам домов учеников поможет определить координаты места строительства школы.

Входные данные
Сначала вводится число N — количество учеников (1 ≤ N ≤ 100000). Далее идут в строго возрастающем порядке координаты домов учеников — целые числа, не превосходящие 2∙109 по модулю.

Выходные данные
Выведите одно целое число — координату точки, в которой лучше всего построить школу. Если ответов несколько, выведите любой из них.

ПРИМЕР
Z_3.in
4 'количество учеников'
1 2 3 4 'координаты домов учеников'
3
-1 0 1

Z_3.out
2
0

Пожалуйста напишите программу с комментариями.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.10.2014, 20:18
Ответы с готовыми решениями:

Выведите одно целое число — сумму чисел от 1 до N
1)Даны четыре числа. Требуется найти самое маленькое и самое большое из них. Входные данные Первая строка содержит целое число N (1...

Во входном файле записано целое число .В выходной файл выведите одно число – количество кругляшей в числе N
Однажды в просторах рунета появился следующий ребус: 157892 = 3 203516 = 2 409578 = 4 236271 = ? Никто так...

Выведите одно целое число — максимальное число, которое могло получиться в протоколе при игре на данном поле
У пети имеется игровое поле размером 3х3, заполненное числами от 1 до 9. В начале игры он может поставить фишку в любую клетку поля. На...

3
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
20.10.2014, 18:42
Лучший ответ Сообщение было отмечено vasy7991 как решение

Решение

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Private Sub Command1_Click()
   Dim n As Long                         'количество учеников
   Dim Coord, s As String                'координаты домов учеников'
   Open "c:\111\Z_3.in" For Input As #1
     Open "c:\111\Z_3.out" For Output As #2
         Do While Not EOF(1)
               Line Input #1, s: n = CInt(Trim(s))
               Line Input #1, s: Coord = Split(Trim(s))
               Write #2, vasy(Coord)
         Loop
      Close #1
    Close #2
End Sub
 
Private Function vasy(ByRef C) As String
    Dim i As Long, n As Long, sum As Long
    n = UBound(C)
    'Здесь должно быть вычисление  координаты точки, в которой лучше всего построить школу
    'Алгоритм предлагаю продумать самому, а пока функция возвращает округленное среднее арифметическое адресов
    For i = 0 To n
        sum = sum + C(i)
    Next i
    vasy = CStr(sum \ (n + 1))
End Function
1
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
20.10.2014, 18:59
Можно модифицировать метод бисекции.
1. Есть отрезок, делим его на четвертины.
2. Ищем суммы до конца первой и третьей четвертей.
3. Сравниваем.
4. Если сумма меньше до конца первой четверти, то дальше берём за новый отрезок левую половину (сумму первых двух четвертей).
5. Если сумма меньше до конца третьей четверти, то дальше берём за новый отрезок правую половину (сумму последних двух четвертей).
6. Если суммы равны, то дальше берём за новый отрезок среднюю половину (сумму второй и третьей четвертей).
Это:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
int search(int start, int end, int *adresses, int n)
{
 int a;
 int b;
 int c;
 int d;
 int i;
 int sc;
 int sd;
 a=start;
 b=end;
 do
 {
  c=(a+b)/4;
  d=(a+b)*3/4;
  for (sc=0, sd=0, i=0; i<n; ++i)
  {
   sc+=abs(adresses[i]-c);
   sd+=abs(adresses[i]-d);
  }
  if (sc<sd)
  {
   a=(a+b)/2;
  }
  if (sd<sc)
  {
   b=(a+b)/2;
  }
  if (sd==sc)
  {
   a=c;
   b=d;
  }
 } while (a!=b)
 return a;
}
на другом языке, переведите и адаптируйте. А при достаточно коротком отрезке перебором.
1
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
20.10.2014, 20:19
Цитата Сообщение от taras atavin Посмотреть сообщение
При достаточно коротком отрезке перебором
Перебором
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Option Explicit
 
Private Sub Command1_Click()
   Dim n As Long                         'количество учеников
   Dim Coord, s As String                'координаты домов учеников'
   Open "c:\111\Z_3.in" For Input As #1
     Open "c:\111\Z_3.out" For Output As #2
         Do While Not EOF(1)
               Line Input #1, s: n = CInt(Trim(s))
               Line Input #1, s: Coord = Split(Trim(s))
               Write #2, search(Coord(0), Coord(n - 1), Coord, n)
         Loop
      Close #1
    Close #2
End Sub
 
Private Function search(ByVal startSearch As Long, ByVal endSearch As Long, ByRef adresses, ByVal n As Long) As Long
    Dim a As Long, b As Long, i As Long, j As Long, sum As Long, min As Long
    min = abs(startSearch + endSearch) * n
    For i = startSearch To endSearch
         sum = 0
         For j = 0 To n - 1
                 sum = sum + Abs(i - adresses(j))
         Next j
         If min > sum Then min = sum: search = i
    Next i
End Function
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.10.2014, 20:19
Помогаю со студенческими работами здесь

Выведите одно целое число — максимальное число, которое могло получиться в протоколе при игре на данном поле
У Пети имеется игровое поле размером 3×3 , заполненное числами от 1 до 9. В начале игры он может поставить фишку в любую клетку поля. На...

В выходной файл выведите одно целое число – минимальное количество банок краски, необходимых для покраски
Здравствуйте, белые рыцари программирования. Сегодня вопрос по задаче. Она очень легкая, но у меня , почему-то, фейлится на первом же...

Гость из прошлого. Выведите одно целое число — максимальное количество литров кефира, которое сможет выпить Коля
Коля Герасимов очень любит кефир, и в своём 1984 году он освоил все тонкости покупки этого чудесного напитка. Но однажды, как вам,...

Определить, в каком необходимо построить школу для удобства всего населенного пункта
Имеется населенный пункт(т А1,А2,...).Определить,в каком необходимо построить школу для удобства всего населенного пункта.(Решение...

Что лучше всего читать/смотреть где лучше всего практиковаться и как в принципе лучше всего учиться программированию
Здравствуйте,извините за вопрос не по теме но: уже около пол года изучаю С языки и начал понимать что я упустил некоторые моменты,не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru