Модераторы: volvo877, Snowy, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Логика решения задачи 
:(
    Опции темы
champion
Дата 30.10.2005, 08:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 26.1.2005

Репутация: нет
Всего: 2



Дана задача:
"Есть массив из N последовательно кол-ва чисел, определите пропущенное число"
Не понимаю логику задачи, объясните плз., буду очень признателен


--------------------
user posted image
PM MAIL   Вверх
Mayk
Дата 30.10.2005, 08:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: нет
Всего: 134



Если A[n+1] - A[n] != 1, то пропущено число A[n]+1. По-моему так


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
Zero
Дата 30.10.2005, 21:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: нет
Всего: 24



Цитата(Mayk @ 30.10.2005, 09:58)
Если A[n+1] - A[n] != 1, то пропущено число A[n]+1. По-моему так

Mayk, только это паскаль, а не С++... smile Поэтому оператор "не равно" пишется не "!=", а вот так "<>"
Т.е.
Код

if a[i+1] - a[i] <> 1 Then <Элемент пропущен>

PM MAIL ICQ   Вверх
Mayk
Дата 30.10.2005, 22:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: нет
Всего: 134



Спасибо. smile Я просто запамятовал как пишется оператор не равно smile


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
Snowy
Дата 31.10.2005, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: нет
Всего: 484



Просто smile
Пропущенное число = n*(n+1)/2 - Сумма_всех_чисел smile
Это для диапазона от 1 до n
PM MAIL   Вверх
Mayk
Дата 31.10.2005, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: нет
Всего: 134



Хмм. Еще имхо можно попоробовать бинарным поиском пройтись, сравнивая
A[medium-1]-A[left] с medium-1-left
и
A[right]-A[medium] с right-medium




--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
Snowy
Дата 1.11.2005, 08:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: нет
Всего: 484



Цитата(Snowy @ 31.10.2005, 15:36)
Пропущенное число = n*(n+1)/2 - Сумма_всех_чисел

Этот способ все же проще.
Мы знаем сумму всех чисел от 1 до n.
Просто считаем сумму чисел в нашем массиве и вычитаем ее.
Разница и будет пропущенным числом.
Это самый быстрый и самый простой способ.
PM MAIL   Вверх
Mayk
Дата 1.11.2005, 08:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: нет
Всего: 134



Цитата(Snowy @ 1.11.2005, 12:28)
Этот способ все же проще.
Мы знаем сумму всех чисел от 1 до n.
Просто считаем сумму чисел в нашем массиве и вычитаем ее.
Разница и будет пропущенным числом.
Это самый быстрый и самый простой способ.

Ты уверен, что просчитать сумму всех чисел (всегда N операций)
будет быстрее, чем найти такое n, что A[n]+1 < a[n], (n операций в худшем слчае) smile
ИМХО так не бывает.
К тому же при больших N при суммировании и перемножении произойдет ошибка переполнения.

Добавлено @ 08:39
(а бинарный поиск,который кажется здесь возможным, так вообще за логарифмическое время выполняется, что есть быть хорошо...)

Это сообщение отредактировал(а) Mayk - 1.11.2005, 08:43


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
Snowy
Дата 3.11.2005, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: нет
Всего: 484



Цитата(Mayk @ 1.11.2005, 08:38)
Ты уверен, что просчитать сумму всех чисел (всегда N операций)

Конечно. Однопроходный цикл от 1 до N-1.

Цитата(Mayk @ 1.11.2005, 08:38)
будет быстрее, чем найти такое n, что A[n]+1 < a[n], (n операций в худшем слчае)

Это при условии, что все числа идут по порядку. А если нет?

Цитата(Mayk @ 1.11.2005, 08:38)
К тому же при больших N при суммировании и перемножении произойдет ошибка переполнения.

Ну это маловероятно.
Перемножать ничего не нужно. Главное, чтобы сумма всех чисел не вышла за границы LongInt. А это весьма маловероятно. Это ж какое n должно быть, чтобы 32-битное число переполнить...
PM MAIL   Вверх
Mayk
Дата 3.11.2005, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: нет
Всего: 134



Цитата(Snowy @ 3.11.2005, 15:24)
Это при условии, что все числа идут по порядку. А если нет?

А это разве не по условию?
Цитата(champion @ 30.10.2005, 12:29)
Есть массив из N последовательно кол-ва чисел




--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
Snowy
Дата 3.11.2005, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: нет
Всего: 484



Цитата(Mayk @ 3.11.2005, 11:56)
А это разве не по условию?
Цитата (champion @ 30.10.2005, 12:29)
Есть массив из N последовательно кол-ва чисел

Нет smile Это всего лишь говорит о том, что мы имеем последовательность из N чисел.
Остальное предполагается.
Ничего не сказано ни о диапазоне, ни о порядке.
Имеем всего 2 факта - набор чисел и одно из них пропущено.
То есть мы сами должны догадаться, что за числа, подразумевать, что они не дублируются, что пропущено только одно, а не несколько...
Условие кривое.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

Запрещается!

1. Обсуждать и делится взломанными компонентами или программным обеспечением

2. Публиковать ссылки на варез

3. Оффтопить

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема »


 




[ Время генерации скрипта: 0.2530 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.