![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
не знаю, насколько тут приветствуются подобные задачки, но...
Есть массив из N чисел. 1. Он заполняется числами так: - числа эти лежат в пределах [1; N] - никогда не повторяются - в случайном порядке (к примеру для N == 5 массив может иметь вид {2, 5, 3, 1, 4}) 2. Одно (любое) из чисел меняется на N + 1. (для преведенного выше примера это может быть {2, 5, 3, 6, 4}) 3. Программе на вход подается полученный массив ({2, 5, 3, 6, 4}). Она должна определить, какое число заменили. Как можно быстрее. Ответом должен быть код на С++, реализующий "поиск". ЗЫ. кому задача покажется слишком легкой, прошу без комментариев - тут не только гении программизма бывают |
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
Alek86, это в "Интересные задачи по программированию", имхо.
|
|||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
да? не знал, что есть
извиняюсь |
|||
|
||||
| Fazil6 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
не понял в чем подвох...
вариант
|
|||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
для {2, 5, 3, 6, 4} твоя программа выведет 3, а не 1, как требовалось нужно не индекс, а ЧИСЛО определить |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
Alek86,
итого O(n) + O(n) = 2 * O(n) ~ O(n) -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
идея засчитана.
может кто ЕЩЕ лучше найдет? |
|||
|
||||
| Fazil6 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
||||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
итого O(n) Добавлено через 4 минуты и 38 секунд думаю, оптимальный вариант Это сообщение отредактировал(а) MAKCim - 11.11.2007, 13:08 -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
я ж говорил, несложная
быстро нашел |
|||
|
||||
| Dov |
|
|||
![]() аСинизатор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1721 Регистрация: 10.5.2003 Где: Эрец-Исраэль Репутация: 15 Всего: 88 |
Не знаю, лучше или нет, но тоже вариант.
-------------------- Тут вечности запах томительный, И свежие фрукты дешевые, А климат у нас – изумительный, И только соседи – #уевые. Игорь Губерман. |
|||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
ёпрст проверил, работает. но КАК, даже разбираться не хочется... если хотел как можно злостней решение придумать, ты цели достиг ;) |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Dov, вариант MAKCim, имхо, быстрей. Скорость выполнения XOR равна скорости выполнения сложения, а у тебя арифметических операций в 3 раза больше в каждой итерации цикла.
Хотя, для малых массивов твой вариант быстрее будет за счет отстуствия умножения (деление не считаю - любой порядочный компилятор обязан заменить его на сдвиг). Это сообщение отредактировал(а) bsa - 11.11.2007, 19:40 |
|||
|
||||
| Dov |
|
||||||
![]() аСинизатор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1721 Регистрация: 10.5.2003 Где: Эрец-Исраэль Репутация: 15 Всего: 88 |
Alek86, ты чего? bsa, вполне возможно. Я хронометраж не делал.
bsa, а для больших массивов(на пару миллионов) у меня не будет такой траблы, например:
Догадываешься? -------------------- Тут вечности запах томительный, И свежие фрукты дешевые, А климат у нас – изумительный, И только соседи – #уевые. Игорь Губерман. |
||||||
|
|||||||
| DKroshkin |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 28.9.2007 Репутация: нет Всего: нет |
Вроде задача простая на знание арифметической прогрессии.
Формул к сожалению не помню (учился давно, если надо могу вспомнить) 1. Бежишь по массиву, считаешь сумму, и вычисляешь кол-во элементов в массиве. 2. Вычисляешь сумму арифметической прогрессии 3. Вычитаешь из суммы, полученной в первом пунке сумму арифм. прогрессии и еще вычитаешь N (кол-во элементов) - это и будет искомое число. Скорость вычисления O(N) |
|||
|
||||
| Nat |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 45 Регистрация: 16.4.2007 Репутация: нет Всего: нет |
Это сообщение отредактировал(а) Nat - 13.11.2007, 08:38 |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
Nat,
возьми массив {4, 2, 3} у тебя будет вывод 7 а надо 1 + для суммы арифметической прогрессии есть формула и не за чем вычислять ее в цикле -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Пардон, неправильно прочел условия :(
Это сообщение отредактировал(а) xvr - 12.11.2007, 15:28 |
|||
|
||||
| DKroshkin |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 28.9.2007 Репутация: нет Всего: нет |
Не проверял, но должно работать Это сообщение отредактировал(а) DKroshkin - 12.11.2007, 18:38 |
|||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
вроде, верно
жаль, ты не первый |
|||
|
||||
| Nat |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 45 Регистрация: 16.4.2007 Репутация: нет Всего: нет |
Sorry, исправила :-[ Теперь должно правильно считать.
|
|||
|
||||
| DKroshkin |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 28.9.2007 Репутация: нет Всего: нет |
Ага обидно. прочитал всю ветку и нашел формулу для вычисления арифм. прогрессии. |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |